2013-04-08 57 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