【发布时间】:2020-08-16 19:25:54
【问题描述】:
我对 Python 很陌生,但我遇到了一个我无法解释/解决的奇怪行为。 基本上,我需要将 python 脚本输出转发到一个文件。
例子:
while True:
print('tick')
time.sleep(5)
然后将输出重定向到文件
python test.py >> test.log 2>&1
但问题是在脚本完成之前文件是空的。 看起来它将输出写入某个缓冲区,并且仅在最后将该缓冲区发送到文件。
这对我来说是完全不能接受的,因为我有一个 24/7 全天候运行的脚本,在这种情况下,我永远不会得到正确的日志。我需要实时写入文件。
我知道它可能会被修复
with open('test.log', mode='a') as log_file:
但在这种情况下,我将无法在终端中查看结果。 除此之外,我将严格限制在脚本内指定的文件。
我想这实际上不是 Python 问题,而是更通用的问题。 不过,是否可以像我在终端中看到的那样即时写入文件?
【问题讨论】:
-
您可以更改 Python 的缓冲,但您可能还需要更改终端 /OS 缓冲。您是否考虑过让您的脚本知道它写入的位置?在 Unix 上,脚本通常将“路径”视为标准输出。
-
要登录python,您应该使用实现的
logging类,其中所有功能都开箱即用。
标签: python python-3.x file output stdout