2009-10-16 11 views
5

ho un lavoro crontab chiamando uno script python e l'output in un file:Perché uscita bash qualche volta non a filo di un programma Python in un file

python run.py &> current_date.log 

ora a volte quando faccio

tail -f current_date.log 

Vedo che il file si sta riempiendo con l'output, ma altre volte il file di registro esiste, ma rimane vuoto per un lungo periodo di tempo. Sono sicuro che lo script python sta stampando roba subito dopo l'avvio e il file di registro è stato creato. Qualche idea perché rimane vuota un po 'di tempo?

+2

Domanda duplicata: http://stackoverflow.com/questions/107705/python-output-buffering – Steven

risposta

12

I buffer Python vengono emessi quando rileva che non sta scrivendo su un tty e pertanto il file di registro potrebbe non ricevere alcun output immediatamente. Puoi configurare lo script per svuotare l'output oppure puoi invocare python con l'argomento -u per ottenere un output senza buffer.

$ python -h 

... 

-u  : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x) 
     see man page for details on internal buffering relating to '-u' 

... 
8

Il problema è in realtà Python (non bash) ed è di progettazione. Buffer Python in uscita per impostazione predefinita. Esegui python con -u per impedire il buffering.

Un altro suggerimento è quello di creare una classe (o funzione speciale) che chiama flush() subito dopo la scrittura nel file di registro.

Problemi correlati