以下のサブプロセスを使用して、非常に大きなファイル(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は、grepされた行からフィルタリングするためのもう1つの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()
順序は異なりますが、役に立ちません。
どうすればループから優雅に抜け出すことができるかについてのヒントはありますか?
バージョンの詳細:Python 2.4.3(#1、2009年6月11日、14:09:37)[GCC 4.1.2 20080704(Red Hat 4.1.2-44)](linux2)