Python - Supervisor, как записать стандартный вывод -

Я не специалист по питону, может кто-нибудь объяснить, в чем проблема?

Я хотел бы собрать стандартный вывод через руководителя http://supervisord.org/

Я сделал 3 разных скрипта, которые печатают вывод, для bash и PHP я могу собрать вывод, без проблем, python не работает.

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")

Мои файлы конфигурации супервизора

удар

[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

Большое спасибо за помощь. Это сводит меня с ума;[

2 ответа

Решение

Ок... вывод на python буферизован, используйте это после печати

sys.stdout.flush()

или (питон 3)

print(something, flush=True)

или лучше

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

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

Вы также можете установить дружественную для stdout версию, используя pip install supervisor-stdout , Найдите инструкции по использованию здесь.

ОБНОВЛЕНИЕ: вы также можете обновить свой supervisord.conf направить вывод на стандартный вывод.

[program:worker2]
command=bash yourscript.sh
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
Другие вопросы по тегам