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 回答