我使用下面的subprocesss读取从相当大的文件行(4的Arnd GB)如何从遍历Subprocess.Popen标准输出的循环中断开?
p1=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
p=subprocess.Popen(gawk_exp, shell=True, stdin=p1.stdout, stdout=subprocess.PIPE)
其中cmd = zgrep “文本搜索” filename.gz
gawk_exp只是另一个GAWK表达式从grepped行过滤。
,然后在p迭代如下:
for line in iter(p.stdout.readline, ''):
..
..
..
if(success):
break
这导致的 “grep:写入输出:破碎管” 错误。
但是我想早点退出for循环,如果它满足一定的条件。
我已经试过许多途径一样,
if(success):
os.kill(p.pid, signal.SIGKILL)
os.kill(p1.pid, signal.SIGKILL)
OR
subprocess.Popen.kill(p1.pid, p.pid)
subprocess.Popen.kill(p.pid)
OR
p1.stdout.close()
p.stdout.close()
在不同的顺序
,但无济于事。
任何提示我如何优雅地摆脱循环?
版本的详细信息: 的Python 2.4.3(#1,2009年6月11日,14时09分37秒) [GCC 4.1.2 20080704(红帽4.1.2-44)上linux2上
感谢您的链接。不幸的是我不能使用它,因为我必须使用2.4.3。 – Aymer 2013-03-14 06:00:18