Python:在Popen之后退出python.exe?

时间:2015-06-18 12:49:03

标签: python python-2.7

小唠叨问题:

我有一个python脚本正常工作,除非我选择菜单选项Popen另一个python脚本:

myPath = r"c:\Python27\myScript.py"
cmd = r"c:\Python27\python.exe '{}'".format(myPath)
py_process = Popen(cmd, stdout=PIPE, stdin=PIPE, stderr=STDOUT)

当我运行该片段(在Windows中)时,子进程按预期在后台启动,但是当我尝试退出主脚本但让子进程在后台运行时:

raise SystemExit

...一个空窗口“c:\ python27 \ python.exe”仍然存在。我尝试过其他类似结果的EXIT方法。注意:当我退出主脚本而不运行该代码片段时,python窗口会根据需要消失。

我的目标是在所有情况下退出主脚本后不留下任何跟踪/窗口,但子进程应该仍然在后台运行。

有任何建议可以实现这一目标吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您想首先与已启动的流程进行通信,然后将其单独运行以进一步运行,您可以选择以下几种方法:

  • 在长时间运行的过程中处理SIGPIPE,不要死在它上面。在启动程序进程退出后,没有标准输入。
  • 使用参数,环境或临时文件传递您想要的任何内容。
  • 如果您想要双向通信,请考虑使用命名管道(man mkfifo)或套接字,或者编写适当的服务器。
  • 在最初的双向沟通​​阶段完成后,使长时间运行的进程分叉。

它不会创建“完全独立的进程”(python-daemon包的功能)。在其他情况下,您应该重定向到os.devnull child的stdin / stdout / stderr以避免等待输入和/或虚假输出到终端

Source