2016-09-16 9 views
2

私はPythonについて熟知していないので、誰かが問題を説明できるか?Python - スーパーバイザは標準出力をログに記録する方法 -

私は上司 http://supervisord.org/

て標準出力を収集したいのですが、私はbashのとPHPのために私はPythonが動作しません、問題なく、出力を収集することができ、出力を印刷する3種類のスクリプトを作りました。 (出力を印刷するには貴様のテストで)

php_test.sh

#!/usr/bin/php 
<?php 
    for($i=0;$i<100000;$i++){ 
     sleep(5); 
     echo 'test'; 
    } 
?> 

bash_test.sh

#!/bin/bash 
for i in `seq 1 100000`; do 
    sleep 5 
    echo item: $i 
done 

python_test.sh

#!/usr/bin/python3 
import time 
import sys 
from contextlib import redirect_stdout 

for num in range(0,100000): 
    time.sleep(5) 
    print("test!") 
    sys.stdout.write("test") 
    with redirect_stdout(sys.stderr): 
     print("test") 

上司の設定ファイル

bash

[program:bash_test] 
process_name=bash_test 
command=/home/user/bash_test.sh 
stdout_logfile=/home/user/bash_test_output.log 
stdout_logfile_maxbytes=0 

PHP

[program:php_test] 
process_name=php_test 
command=/home/user/php_test.sh 
stdout_logfile=/home/user/php_test_output.log 
stdout_logfile_maxbytes=0 

パイソン

[program:python_test] 
process_name=python_test 
command=/home/user/python_test.sh 
stdout_logfile=/home/user/python_test_output.log 
stdout_logfile_maxbytes=0 

は助けをそんなにありがとう。 それは狂気私を運転だ; [

+0

2つの出力のどちらも機能しませんか? –

+0

PHPとBASHは正常に動作し、Pythonは何も印刷しません。 'python3。/ python_test.sh'でスクリプトを実行すると、出力はコンソールに表示されますが、スーパーバイザログには表示されません; – Dario

答えて

3

OK ... Pythonの出力がバッファリングされ、印刷後の 使用この

sys.stdout.flush() 

か(のpython 3)

print(something, flush=True) 

またはより良い

import logging 
logging.warning('Watch out!') 

https://docs.python.org/3/howto/logging.html

関連する問題