【发布时间】:2013-09-23 14:32:33
【问题描述】:
我正在尝试使用这个单行,它应该打印所有添加到文件/var/log/messages.log 中的行。
sudo tail -f /var/log/messages.log | python2 -c 'exec("import sys\n\nfor line in sys.stdin:\n\tprint line")'
为了可读性,python代码为:
import sys
for line in sys.stdin:
print line
如果我向/var/log/messages.log 添加一行,我看不到任何打印内容。但是,如果我添加大量数据,我就会开始获得输出。
对于生成器sys.stdin 生成data 的频率是否有明确的行为?
PS:我的最终目标是了解one-liner,它输出每秒馈送到python程序的行数。
编辑:如何假设解释器每隔一秒就会越过这条线if t > e:?
【问题讨论】:
-
在我的机器上,链接的单线不能很好地工作。它遇到的问题与您的代码完全相同——报告会延迟到
file.next()的预读缓冲区得到满足。 -
顺便说一句,这并不是真正的单线。
-
P.S.我已经更新了我的答案,以解释为什么“一个班轮”会以这种方式工作;但是,至少在我的计算机上,它仍然存在相同的输入缓冲问题,就像 @Robᵩ 报告的那样。
标签: python linux pipe generator