python如何使用linux shell的子进程管道

时间:2016-10-09 20:57:52

标签: python linux shell pipe subprocess

我有一个python脚本搜索日志,它不断输出找到的日志,我想使用linux管道来过滤所需的输出。像这样的例子:

$ python logsearch.py​​ | grep timeout

问题是排序和wc被阻塞,直到logsearch.py​​完成,而logsearch.py​​将连续输出结果。

示例logsearch.py​​:

p = subprocess.Popen("ping -c 5 google.com", shell=True, stdout=**sys.stdout**)

更新

想通了,只需将子进程中的stdout更改为sys.stdout,python就会为你处理管道。

git rebase master mybranch

感谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

为什么要使用grep?为什么不用Python做所有的事情?

from subprocess import Popen, PIPE
p = Popen(['ping', 'google.com'], shell=False, stdin=PIPE, stdout=PIPE)

for line in p.stdout:
    if 'timeout' in line.split():
        # Process the error
        print("Timeout error!!")
    else:
        print(line)

<强>更新
我按照推荐的@triplee更改了Popen行。 Actual meaning of 'shell=True' in subprocess

中的利弊