[Python] Python e redirezione output

Nicola Larosa nico a tekNico.net
Mer 18 Maggio 2011 15:33:46 CEST


Valerio Pachera wrote:
> Ho notato un comportamento piuttosto ambiguo di python 2.5 su debian
> lenny.

Nel senso che non l'hai notato su altre versioni? O hai provato solo quella?


> Un semplice script con un ciclo infinito e uno sleep di 60 secondi
> che stampa la data ed ora attuali.
> 
> script.py >> /var/log/myscript.log 2>&1
> 
> Se provo a visualizzare il contenuto del file tramite cat o less lo
> vedo vuoto.
> Se interrompo lo script tramite ctrl+c, vedo comparire i print delle 
> deta ed il trace back del ctrl+c.

Le deta? ;-)


> A dire il vero, non sempre fa così. A volte, il file di log risulta 
> leggibile (cioè vedo i print delle date) ma, ad un certo punto, le 
> fate smettono di essere scritte.

Le fate? ;-)


> Il processo python è ancora attivo.
> Sembra proprio che si interrompa la redirezione.
> Nota: non c'è logrotate su quel file di log.

Sembra il buffering, prova a passare l'opzione "-u" al comando:

$ python -u script.py >> /var/log/myscript.log 2>&1


> Un mio amico consiglia di scrivere i file di log damite l'oggetto file
> di python:
> f = open('/var/log/myscript.log')
> 
> Questa soluzione però non mi entusiasma.

Se fai così, devo chiamare f.flush() dopo f.write(), o meglio ancora
usare il modulo standard "logging", anzi è probabilmente il modo migliore
in generale.

-- 
Nicola Larosa - http://www.tekNico.net/

Articles in the literature of procrastination often allude
to the author's own problems with finishing the piece.
(This article will be no exception.)
 - James Surowiecki, October 2010


Maggiori informazioni sulla lista Python