Python 如何打破在子进程上迭代的循环。Popen stdout?
我正在使用下面的子进程从一个相当大的文件(arnd 4 GB)中读取行 其中cmd=zgrep“要搜索的文本”filename.gz gawk_exp只是另一个要从灰色行中筛选的gawk表达式 然后在p上迭代,如下所示:Python 如何打破在子进程上迭代的循环。Popen stdout?,python,Python,我正在使用下面的子进程从一个相当大的文件(arnd 4 GB)中读取行 其中cmd=zgrep“要搜索的文本”filename.gz gawk_exp只是另一个要从灰色行中筛选的gawk表达式 然后在p上迭代,如下所示: for line in iter(p.stdout.readline, ''): .. .. .. if(success): break 这将导致“grep:writing output:break pipe”错误 但是,如果满足某些条件
for line in iter(p.stdout.readline, ''):
..
..
..
if(success):
break
这将导致“grep:writing output:break pipe”错误
但是,如果满足某些条件,我希望尽早退出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(2009年6月11日14:09:37)
[GCC 4.1.2 20080704(Red Hat 4.1.2-44)]在linux2上您可以为
zgrep
作业设置stderr
,捕获它,并且仅当您在其他地方检测到错误时(例如,如果您从未在循环中提前退出)打印它在那里写的内容
或者,停止使用
Popen
运行zgrep
,开始直接在Python中使用zlib
:-我个人会尝试一下,然后可能用Python实现整个过程,而不是使用gawk我不是直接回答你的问题,但我要指出的是,对于这类任务,它是非常有用的。用它代替popen等,会让你的生活变得更加轻松。谢谢你的链接。不幸的是,我不能使用它,因为我必须使用2.4.3。
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()