Python - Supervisor如何记录标准输出 -

Dar*_*rio 6 python unix linux python-3.x supervisord

我不是关于python的专家,有人可以解释问题出在哪里?

我想通过主管http://supervisord.org/收集标准品.

我已经制作了3个不同的脚本来打印输出,对于bash和PHP我可以收集输出,没有问题,python不起作用.

php_test.sh

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

bash_test.sh

#!/bin/bash
for i in `seq 1 100000`; do
    sleep 5
    echo item: $i
done
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

我的主管配置文件

庆典

[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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

蟒蛇

[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
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助.这让我疯狂 ;[

Dar*_*rio 12

ok ... python输出是缓冲的,打印后使用它

sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

或(python 3)

print(something, flush=True)
Run Code Online (Sandbox Code Playgroud)

或更好

import logging
logging.warning('Watch out!')
Run Code Online (Sandbox Code Playgroud)

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


mar*_*xor 6

您还可以使用pip install supervisor-stdout . 在此处查找使用说明。

更新:您还可以更新您的supervisord.conf以将输出指向标准输出。

[program:worker2]
command=bash yourscript.sh
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
Run Code Online (Sandbox Code Playgroud)