2009-10-16 10 views
5

J'ai un crontab appeler un script python et la sortie vers un fichier:Pourquoi est-bash parfois pas de sortie au ras d'un programme python dans un fichier

python run.py &> current_date.log 

maintenant parfois quand je fais

tail -f current_date.log 

Je vois le fichier se remplir avec la sortie, mais d'autres fois le fichier journal existe, mais reste vide pendant une longue période. Je suis sûr que le script python est en train d'imprimer juste après son lancement, et le fichier journal est créé. Des idées pourquoi reste-t-il vide une partie du temps?

+2

Dupliquer la question: http://stackoverflow.com/questions/107705/python-output-buffering – Steven

Répondre

12

Les tampons Python sont générés lorsqu'ils détectent qu'il n'écrit pas sur un terminal, et que votre fichier journal ne reçoit pas de sortie immédiatement. Vous pouvez configurer votre script pour vider la sortie ou vous pouvez appeler python avec l'argument -u pour obtenir une sortie sans tampon.

$ python -h 

... 

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

... 
8

Le problème est réellement Python (pas bash) et est par conception. Les tampons Python sont affichés par défaut. Exécutez python avec -u pour empêcher la mise en mémoire tampon.

Une autre suggestion consiste à créer une classe (ou une fonction spéciale) qui appelle flush() juste après l'écriture dans le fichier journal.

Questions connexes