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!')
Вы также можете установить дружественную для stdout версию, используя pip install supervisor-stdout
, Найдите инструкции по использованию здесь.
ОБНОВЛЕНИЕ: вы также можете обновить свой supervisord.conf
направить вывод на стандартный вывод.
[program:worker2]
command=bash yourscript.sh
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0