我有一个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
感谢大家的帮助!
答案 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