1

私は使っている

std = subprocess.PIPE 

出力のすべての行で特定の用語をチェックします。「完了」したら、 os.kill でサブプロセスを手動で強制終了します。

p = subprocess.Popen(['vprobe' ,'/vprobe/myhello.emt'], shell = False, stdout=subprocess.PIPE, preexec_fn=os.setsid)
while True:
   line = p.stdout.readline()
   logfile.write(line)
   if re.search("done", line):
      break
   print "waiting"
os.kill(p.pid, signal.SIGINT)

プロセスは強制終了されますが (unix で「ps」コマンドを使用して確認しました)、最後に次のエラーが表示されます。

close failed in file object destructor:
Error in sys.excepthook:
Original exception was:

これはおそらく、PIPE を実際に閉じずにプロセスを強制終了したためだと思います。手動で行う方法について何か提案はありますか?

4

1 に答える 1

1

Popenオブジェクトには、これを行うためのメソッドterminateがあります。代わりにこの方法を使用できませんか?

どうしても殺したい場合SIGINTは方法もありsend_signalます。

于 2012-10-23T12:15:31.190 に答える