2009-10-16 58 views
5

我有一個crontab任務調用一個python腳本,並輸出到文件:爲什麼Python程序的慶典有時不刷新輸出到文件

python run.py &> current_date.log 

現在有時當我做

tail -f current_date.log 

我看到填滿輸出的文件,但其他時間日誌文件存在,但長時間保持空。我確信python腳本在開始運行後正在打印東西,並且創建日誌文件。任何想法爲什麼它一直保持空白?

+2

重複問題:http://stackoverflow.com/questions/107705/python-output-buffering – Steven 2009-10-16 20:34:31

回答

12

Python緩衝區輸出,當它檢測到它不寫入tty,因此您的日誌文件可能不會立即收到任何輸出。您可以配置您的腳本以刷新輸出,或者您可以使用-u參數調用python以獲取無緩衝輸出。

$ python -h 

... 

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

... 
8

問題實際上是Python(而不是bash),並且是通過設計。 Python默認輸出緩衝區。用-u運行python以防止緩衝。

另一個建議是創建一個在寫入日誌文件後立即調用flush()的類(或特殊功能)。

相關問題