28

[program:x]を実行していて、多くのことを/sys.stdout.writesで出力します。[supervisord]のAUTOchildlogdirにも[program:x]のstdout_logfileにも表示されないものがありますか?何かが足りませんか?

[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
4

3 に答える 3

53

Python 出力はバッファリングされます。環境変数PYTHONUNBUFFERED=1を設定するsupervisord.confと、バッファリングが無効になり、ログ メッセージがより早く表示されます。

[program:x]
environment = PYTHONUNBUFFERED=1

-uまたは、コマンド ライン スイッチpythonコマンドに追加します。

[program:x]
command = python -u file.py

sys.stdoutまたは、ハンドラーを明示的にフラッシュすることもできます。

sys.stdout.flush()

Python 3.3 以降では、flush=Trueパラメーターを追加して、関数にこれを実行させることができます。

print(something, flush=True)
于 2012-12-19T15:54:01.290 に答える
48

次のようにプログラムを実行できます。

python -u file.py

これにより、バッファリングされていない出力が生成されます

于 2013-07-31T04:19:52.070 に答える