我正在使用以下子进程从一个非常大的文件(arnd 4 GB)中读取行
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 只是另一个从 grepped 行中过滤的 gawk 表达式。
然后在 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()
以不同的顺序,但无济于事。
关于如何优雅地摆脱循环的任何提示?
版本详细信息:Linux2 上的 Python 2.4.3 (#1, Jun 11 2009, 14:09:37) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]