2013-04-08 58 views
3

如何只存储子流程返回的最后一行?等待子流程的最后一行

特别是,我从python调用了一个子进程,它返回了很多输出行。子处理在一些不可预知的(可能很长的)时间后终止,我只需要处理来自STDOUT的最后一行。

我可以以某种方式避免整个输出的存储,只是等待最后一个?

+0

可你只需要使用'proc.stdout.readline()'在一个循环? – wim 2013-04-08 12:40:14

回答

1

在阅读最后一行之前,您必须处理(并放弃)每一行。

所以你可以做这样的事情

line = None 
for line in proc.stdout: 
    pass 
# now line is either the last line or None. 
if line is not None: 
    process(line) 
+0

那么,没有读取所有输出行就没有办法运行子进程?等待它的完成,然后阅读最后一行? 如果不是,我会用这个解决方案,看起来很合理。谢谢。 – Czenek 2013-04-09 06:42:23

+0

@Czenek你可以运行两个子进程,并将感兴趣的输出管道化为运行'tail -n 1'的一个,但是'tail'也会做同样的事情,所以我没有看到好处。 – glglgl 2013-04-09 07:16:40

+0

好的,谢谢你的帮助。我只是想确定是否没有更好的方法来做到这一点。 – Czenek 2013-04-09 11:21:30

-1

使子流程中的所有打印以'\ r'而不是默认'\ n'结束,然后它们将相互替换。

+0

这是关于处理,而不是显示。 – glglgl 2013-04-08 12:54:35