我使用下面的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