запустить python в оболочке и перенаправить python печать - PullRequest
0 голосов
/ 16 июня 2020

У меня есть сценарий оболочки, который запускает файл python и ведет журнал. Сначала я перенаправляю все stdout и stderr в указанный файл c. но заметил, что оператор печати в python не показывает результат печати в моем конкретном c файле журнала. Это мой файл оболочки:

date=$(date +"%D")

exec 3>&1
exec 4>&2
exec 1>>/root/shell/auto.log
exec 2>>/root/shell/auto.log

header=$(printf "%-10s" "=")
echo "${header}${date}--start${header}"| sed "s/ /=/g"

python /root/shell/someAuto.py

echo "${header}${date}--end${header}"| sed "s/ /=/g"
exec 1>&3
exec 2>&4

Я добавляю демонстрационный пример, чтобы повторить эту проблему. Простой python файл может быть таким:

#!/usr/bin/python3
import time
import sys
for i in range(10):
    print(i)
    time.sleep(5)
    sys.stdout.flush()

при запуске запускать сценарий оболочки, tail -f auto.log, начальные заголовки печатаются быстро и успешно, но ждите дольше, чем каждые 5 секунд, результаты печати не отображаются, я не знаю почему ... вот какой-то журнал. Причина, по которой я всегда KeyboardInterrupt, заключается в том, что он работает так долго, это ненормально, поэтому я прекращаю.

==========06/16/20--start==========
0
1
Traceback (most recent call last):
  File "/root/shell/testLog.py", line 6, in <module>
    time.sleep(5)
KeyboardInterrupt
==========06/16/20--end==========
==========06/16/20--start==========
0
Traceback (most recent call last):
  File "/root/shell/testLog.py", line 6, in <module>
    time.sleep(5)
KeyboardInterrupt
==========06/16/20--end==========
==========06/16/20--start==========
0
Traceback (most recent call last):
  File "/root/shell/testLog.py", line 6, in <module>
    time.sleep(5)
KeyboardInterrupt
==========06/16/20--end==========
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...