手动关闭subprocess.PIPE

时间:2012-10-23 12:12:07

标签: python kill

我正在使用

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的情况下杀死了这个过程。我有什么建议可以手动完成吗?

1 个答案:

答案 0 :(得分:1)

Popen对象有terminate方法可以执行此操作。您可以不使用此方法吗?

如果你真的想用SIGINT杀人,那么还有send_signal方法。