将标准输出重定向到文件时,Python 脚本不写入任何输出

Syn*_*lat 13 bash python-3.x raspberry-pi3

我在树莓派上启动时运行了一个 python 脚本(工作正常),我想将输出附加到现有的文本文件中。我在我的 /etc/rc.local 文件中得到了这个代码(我用 cron 尝试了同样的方法,但由于某种原因它甚至没有启动脚本)。

python3 /home/pi/script.py >> /home/pi/log.txt 
Run Code Online (Sandbox Code Playgroud)

不幸的是,无论我尝试什么,日志文件总是空的,除非我直接运行相同的命令并通过按 ctrl+c 而不是 ctrl+z 中止脚本。似乎脚本在向文件写入任何内容之前必须以正确的方式关闭,但我希望它逐渐保存每个输出的文件。

编辑:我解决了。显然,只有在填充一定数量的内存或脚本完成后才会写入文件是正常的(这在我的情况下从未发生过,因为我总是在这之前重新启动 pi)。添加标志 -u 以立即写入文件。

python3 -u /home/pi/script.py >> /home/pi/log.txt 
Run Code Online (Sandbox Code Playgroud)

Eug*_*ako 6

如果您使用print来输出文本,它的参数flush可能会帮助您:

print('Hello, World', flush=True)
Run Code Online (Sandbox Code Playgroud)

除此以外:

import sys
sys.stdout.write('Hello, world\n')
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

会有同样的效果。