【发布时间】:2017-02-18 07:05:49
【问题描述】:
我有一个 python 脚本搜索日志,它不断输出找到的日志,我想使用 linux 管道来过滤所需的输出。像这样的例子:
$python logsearch.py | grep 超时
问题是 sort 和 wc 一直阻塞,直到 logsearch.py 完成,而 logsearch.py 会不断输出结果。
示例 logsearch.py:
p = subprocess.Popen("ping google.com", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for line in p.stdout:
print(line)
更新:
想通了,把子进程中的stdout改成sys.stdout,python会帮你处理管道的。
p = subprocess.Popen("ping -c 5 google.com", shell=True, stdout=**sys.stdout**)
感谢大家的帮助!
【问题讨论】:
-
ping -c 5是一个永远运行的脚本的奇怪示例!但是,是的,在你拥有所有东西之前,你无法对事物进行排序或计算事物的数量。 -
@tdelaney 我删除了 ping 的计数,而不是排序,我使用 grep 所以假设数据应该通过管道流向 grep,但它似乎永远运行而没有打印任何内容。
-
您没有收到任何信息,因为输出与超时不匹配。试试 $python logsearch.py | grep -v 超时
标签: python linux shell pipe subprocess