2012-12-18 68 views
19

我有一個[程序:x]運行,它打印/ sys.stdout.writes很多東西。在[supervisord]的AUTO childlogdir中或[program:x]的stdout_logfile中都沒有出現這種情況。我是否錯過了某些內容?supervisord日誌不顯示我的輸出

如何從[program:x]捕獲打印或標準輸出的所有內容?

在我的計劃,我明確地做兩個,

print "something" 
sys.stdout.write("something") 

相關supervisord.conf文件

[supervisord] 
childlogdir = %(here)s/../logs/supervisord/ 
logfile = %(here)s/../logs/supervisord/supervisord.log 
logfile_maxbytes = 100MB 
logfile_backups = 10 
loglevel = info 
pidfile = %(here)s/../logs/supervisord/supervisord.pid 
umask = 022 
nodaemon = false 
nocleanup = false 

[program:x] 
directory = %(here)s/../ 
command = python file.py 
autostart=true 
autorestart=true 
redirect_stderr=true 
stdout_logfile = /appropriate-path/to/access.log 
+0

你一定程序打印到'stdout'而不是'標準錯誤'? –

+0

編輯了更多信息的問題。當我做一個sys.stdout.write,它應該打印到標準輸出 – zubinmehta

+0

那麼你的''[program:..]'的supervisord配置是什麼?哦,並且嘗試'sys.stdout.flush()'以確保它不是緩衝區。 –

回答

26

Python的輸出緩衝,請確保您刷新sys.stdout處理程序來查看日誌信息更快:

sys.stdout.flush() 

在python 3.3及更高版本上,您可以添加flush=True參數具有的功能爲你做這個:

print(something, flush=True) 
+3

您還可以在您的主管配置中將一行設置爲PYTHONUNBUFFERED = 1環境變量,如下所示:environment = PYTHONUNBUFFERED = 1 –

41

您可以像這樣運行程序:

python -u file.py 

這將產生緩衝輸出

+1

Proper(15char) – Tim

0

;如果你的Python腳本,你不能或不希望更改爲在常規基礎上刷新輸出,則可以使用Expect軟件包中的unbuffer

對於(從supervisord運行在一個shell腳本)的碼頭工人,容器我最近使用它像一個Django應用程序:

unbuffer python -u manage.py runserver 0.0.0.0:11000 2>&1 >> /var/log/django.log