我有一個crontab任務調用一個python腳本,並輸出到文件:爲什麼Python程序的慶典有時不刷新輸出到文件
python run.py &> current_date.log
現在有時當我做
tail -f current_date.log
我看到填滿輸出的文件,但其他時間日誌文件存在,但長時間保持空。我確信python腳本在開始運行後正在打印東西,並且創建日誌文件爲。任何想法爲什麼它一直保持空白?
我有一個crontab任務調用一個python腳本,並輸出到文件:爲什麼Python程序的慶典有時不刷新輸出到文件
python run.py &> current_date.log
現在有時當我做
tail -f current_date.log
我看到填滿輸出的文件,但其他時間日誌文件存在,但長時間保持空。我確信python腳本在開始運行後正在打印東西,並且創建日誌文件爲。任何想法爲什麼它一直保持空白?
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'
...
問題實際上是Python(而不是bash),並且是通過設計。 Python默認輸出緩衝區。用-u
運行python以防止緩衝。
另一個建議是創建一個在寫入日誌文件後立即調用flush()
的類(或特殊功能)。
重複問題:http://stackoverflow.com/questions/107705/python-output-buffering – Steven 2009-10-16 20:34:31