嗨我在Windows中编写python脚本并使用子进程
我有一条线
results = subprocess.Popen(['xyz.exe'],stdout = subprocess.PIPE)
脚本结束后,我回到cmd中的提示胡萝卜,我看到打印出的脚本有更多输出 . 我看到的东西就像
找不到xxx_echo.txt
被反复打印出来 .
如何正确关闭Windows中的子进程?
Could Not Find xxx_echo.txt 看起来像一条错误消息,可能会打印在stderr上 . 您对 Popen() 的调用不会收集孩子的stderr输出,因此它将打印在您的终端中 .
Could Not Find xxx_echo.txt
Popen()
如果您的脚本没有等待子进程完成,则在脚本退出后,子进程可能仍在执行 . 您应该调用 wait() 来等待孩子完成执行 . 如果您不想等待,请调用 terminate() 以终止子进程 .
wait()
terminate()
如果您不希望它被转储到终端,您还应该收集stderr .
child = subprocess.Popen(['xyz.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) child.wait() print child.returncode
您需要在退出主脚本之前调用results.kill()或results.terminate()(它们是Windows上的别名)来结束子进程 .
你必须调用 terminate() 方法:
results.terminate()
卡住的子流程也有 kill() .
kill()
3 回答
Could Not Find xxx_echo.txt
看起来像一条错误消息,可能会打印在stderr上 . 您对Popen()
的调用不会收集孩子的stderr输出,因此它将打印在您的终端中 .如果您的脚本没有等待子进程完成,则在脚本退出后,子进程可能仍在执行 . 您应该调用
wait()
来等待孩子完成执行 . 如果您不想等待,请调用terminate()
以终止子进程 .如果您不希望它被转储到终端,您还应该收集stderr .
您需要在退出主脚本之前调用results.kill()或results.terminate()(它们是Windows上的别名)来结束子进程 .
你必须调用
terminate()
方法:卡住的子流程也有
kill()
.