我有一个 Python 脚本test.py
,它每秒写入 100 行:
from time import sleep
for i in range(100):
print(f'line {i}')
sleep(1)
我想将其输出重定向到log.txt
不带缓冲的文件,即每秒将一行附加到文件。
我试过:
python3 test.py > log.txt
python3 test.py | tee log.txt
stdbuf -oL python3 test.py > log.txt
script -c "python3 test.py" log.tx
这些选项均不会log.txt
在运行时逐行写入test.py
。整个输出将在程序完成或中断时转储。解决方案是什么?
程序本身必须改为不缓冲 – 或者更频繁地刷新缓冲数据。
-u
,sys.stdout.reconfigure(line_buffering=True)
,print(..., flush=True)
,sys.stdout.flush()
。使用时
stdbuf -oL
,它会以类似的方式注入重新配置 Glibc“stdout”的代码,但它只会影响 GlibcFILE*
缓冲(即来自 C 代码),而不会影响 Python 等效代码。