脚本结束后,Python Windows脚本子进程继续输出

时间:2014-10-22 04:07:09

标签: python windows subprocess

您好我在Windows中编写python脚本并使用子进程

我有一行像

  

结果= subprocess.Popen([' xyz.exe&#39],标准输出= subprocess.PIPE)

脚本结束后,我回到cmd中的提示胡萝卜,我看到打印出的脚本有更多输出。 我看到像

这样的东西
  

无法找到xxx_echo.txt

反复打印出来。

如何在Windows中正确关闭子流程?

3 个答案:

答案 0 :(得分:3)

Could Not Find xxx_echo.txt看起来像一条错误消息,可能会打印在stderr上。您对Popen()的呼叫不会收集孩子的stderr输出,因此它将打印在您的终端中。

如果您的脚本没有等待孩子完成,则在您的脚本退出后,孩子可能仍在执行。您应该调用wait()等待孩子完成执行。如果您不想等,请致电terminate()以终止子流程。

如果你不希望它被转发到终端,你也应该收集stderr。

child = subprocess.Popen(['xyz.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
child.wait()
print child.returncode

答案 1 :(得分:0)

您需要在退出主脚本之前调用results.kill()或results.terminate()(它们是Windows上的别名)来结束子进程。

答案 2 :(得分:0)

您必须调用terminate()方法:

results.terminate()

卡住的子流程也有kill()