gpt4 book ai didi

python - tail 和 less 命令不能实时监控文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:28 53 4
gpt4 key购买 nike

我正在寻找一种方法来监视由 Linux 上的程序写入的文件。我在 here 中找到了 tail -F 命令, 并且还推荐了 less +FG。我通过在一个终端中运行 tail -F file 和一个简单的 python 脚本来测试它:

import time

for i in range(20):
print i
time.sleep(0.5)

在另一个。我将输出重定向到文件:

python script.py >> file

我原以为 tail 会跟踪文件内容并以固定时间间隔更新显示,而它只显示命令终止后写入文件的内容。

同样的事情发生在 less +FG 上,如果我观察 cat 的输出也是如此。我也尝试过使用截断文件 > 而不是 >> 的常用重定向。这里它说文件被截断了,但仍然没有实时跟踪它。

知道为什么这行不通吗? (建议 here 这可能是由于缓冲写入,但由于我的脚本运行超过 10 秒,我怀疑这可能不是原因)

编辑:以防万一,我正在运行 Linux Mint 18.1

最佳答案

Python 的标准输出是缓冲的。如果当您关闭脚本/脚本完成时,您会看到所有输出 - 这绝对是缓冲区问题。

您可以改用它:

import time
import sys

for i in range(20):
sys.stdout.write('%d\n' % i)
sys.stdout.flush()
time.sleep(0.5)

我已经对其进行了测试,它会实时打印值。为了克服缓冲区问题,在每个 .write() 方法之后,我使用 .flush() 强制“刷新”缓冲区。


来自评论的其他选项:

  • 使用带有sys.stdout.flush()后记的原始print语句
  • 使用 python -u 运行 python 脚本以获得无缓冲的二进制 stdout 和 stderr

关于python - tail 和 less 命令不能实时监控文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300574/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com