Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-08 Per discussione Roberto Polli
Il 7 luglio 2015 23:46, Enrico Bianchi enrico.bian...@ymail.com ha scritto:
 Vedo che ad ogni ciclo while apri il file in lettura ma non lo chiudi mai. A
 questo punto, o un f.close() dopo la riga 21, o un with che copre dalla riga
 14 alla 21

Si Enrì. Scrivevo al volo in %edit di ipython.

Volevo capire se - a parte le performance - l'implementazione
dell'iteratore di open() poteva presentare qualche problematica e
dovevo passare dal giro (inotify/read-timeout-reopen).

L'errore da lamer era il ctime... mai stare troppo tempo senza usare sta roba ;)

Pace,
R.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-08 Per discussione Manlio Perillo
2015-07-07 12:11 GMT+02:00 Roberto Polli robipo...@gmail.com:

 Ciao belli,

 ho fatto un semplice tail in python.
  http://ur1.ca/n1ff6

 Vedete qualche problema nella lettura dei dati (usare semplicemente
 l'iteratore restituito da open() anziché read() ?


Io userei readline in questo caso, perchè rende il flusso del programma più
semplice.

Qui c'è una implementazione alternativa:
https://github.com/kasun/python-tail/blob/master/tail.py

anche se non capisco perchè fa il seek nel caso in cui readline viene
chiamata alla fine del file.


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione Roberto Polli
Il 7 luglio 2015 18:04, enrico franchi enrico.fran...@gmail.com ha scritto:
 E poi ci sarebbe da dire che inotify ti salverebbe un sacco di tempo.
Vero, volevo farla semplice però: se devo fare inotify | read
bloccante con timeout tanto vale usare modulo.


 Comunque non sono d'accordo che le pipe sono fuori scope.
 tutto il mondo di unix si basa sul fatto che in generale non ti interessa 
 saperlo.
In generale non sono off-scope, ed hai ragionissima su tutto.

Il caso è il seguente:
  - devo mettere in tail un logfile (neanche compresso)
  - se platform-independant meglio
  - con poco codice che sia comprensibile da un non-pythonista
  - non-oop

Diciamo che il giochino funziona ma non gestisce dei corner-case:
passerò probabilmente ad un modulo e ciccia.

Poi oggi pure ripassone di Linux System Programming - avevo scordato
che ctime viene sempre modificato e imho man 2 stat non è chiarissima.

Pace,
R.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione enrico franchi
E poi ci sarebbe da dire che inotify ti salverebbe un sacco di tempo.

Comunque non sono d'accordo che le pipe sono fuori scope. Prendi un path
del filesystem: non c'e' veramente ragione perche' chi usa il tuo codice
debba sapere cosa e' un file e cosa e' una named pipe: tutto il mondo di
unix si basa sul fatto che in generale non ti interessa saperlo.

2015-07-07 13:08 GMT+01:00 Roberto Polli robipo...@gmail.com:

 Il 7 luglio 2015 13:55, Roberto Polli robipo...@gmail.com ha scritto:
   - usare ctime come creation time non è safe etc.etc.etc.

 Ecco... qui mi ricordavo male invece. ctime viene aggiornato *sia* al
 cambio dei metadati che del contenuto,
 quindi il gioco non funziona ;)
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione Enrico Bianchi

On 07/07/2015 12:11 PM, Roberto Polli wrote:

Vedete qualche problema


Vedo che ad ogni ciclo while apri il file in lettura ma non lo chiudi 
mai. A questo punto, o un f.close() dopo la riga 21, o un with che copre 
dalla riga 14 alla 21


Enrico

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione Roberto Polli
Il 7 luglio 2015 12:55, enrico franchi enrico.fran...@gmail.com ha scritto:
 Vedo un po' di problemi, ma forse la parola chiave e' *semplice*. tipo che
 so'... non usi with.
Si, sono in %edit di ipython ;)
Preciso pure che - ma non è questo il punto:
 - manca la riga di set del ctime
 - yield l
 - usare ctime come creation time non è safe etc.etc.etc.


 Di fatto con l'iteratore stai facendo line buffering, con read vari a chunk.
 leggere a blocchetti e' molto piu' efficiente...
Ok, visto il carico attuale non credo impatti particolarmente. I log sono quasi
in formato csv e non arrivano a 1GB giornaliero. Mi faccio qualche
test per sicurezza.

Magari andrebbe un try..finally: pos=f.tell()

... cosa fa ciascun metodo di input, per dire, quando il coso da
 cui stai leggendo e' una named pipe (caso assolutamente legittimo)?
Giusto, le named-pipe sono out of scope: nel caso generale avrebbe senso usare
un modulo ad hoc.

Pace,
R.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione Roberto Polli
Il 7 luglio 2015 13:55, Roberto Polli robipo...@gmail.com ha scritto:
  - usare ctime come creation time non è safe etc.etc.etc.

Ecco... qui mi ricordavo male invece. ctime viene aggiornato *sia* al
cambio dei metadati che del contenuto,
quindi il gioco non funziona ;)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione enrico franchi
2015-07-07 11:11 GMT+01:00 Roberto Polli robipo...@gmail.com:

 ho fatto un semplice tail in python.
  http://ur1.ca/n1ff6

 Vedete qualche problema nella lettura dei dati (usare semplicemente
 l'iteratore restituito da open() anziché read() ?


Vedo un po' di problemi, ma forse la parola chiave e' *semplice*. tipo che
so'... non usi with.
Riguardo iter vs. read...

Di fatto con l'iteratore stai facendo line buffering, con read vari a
chunk. Ora il tail vero e' scritto in modo che se gli chiedi di contarti
le righe (-n) legge linea per linea, se no legge a blocchetti. Il che vuole
dire che puoi sentirti libero di leggere a blocchetti. Ovviamente leggere a
blocchetti e' molto piu' efficiente...

Specie perche' tu non stai considerando un dettaglio parecchio importante:
in Unix tutto e' un file, anche cose che non sono files. Ora la domanda
chiave e'... cosa fa ciascun metodo di input, per dire, quando il coso da
cui stai leggendo e' una named pipe (caso assolutamente legittimo)?




-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Un semplice tail in python: dove sbaglio?

2015-07-07 Per discussione Roberto Polli
Ciao belli,

ho fatto un semplice tail in python.
 http://ur1.ca/n1ff6

Vedete qualche problema nella lettura dei dati (usare semplicemente
l'iteratore restituito da open() anziché read() ?

Pace,
R.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python