У меня есть сценарий оболочки, который запускает файл 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==========