私は使っている
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 を実際に閉じずにプロセスを強制終了したためだと思います。手動で行う方法について何か提案はありますか?