问题 将python子进程调用为守护进程并退出


我正在使用一对python程序,其中一个应该调用第二个。

但是,这应该的方式,第一个程序,使第二个中的守护进程(或者在后台进程中运行)来完成,然后退出,而无需等待第二个程序结束。

这在Python中可行吗?

我一直在寻找os.fork,子进程模块,但我很困惑,因为正确的方法来实现这个...


7989
2018-01-20 20:51


起源



答案:


您可以使用 subprocess.Popen 为了这:

import subprocess

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py']
subprocess.Popen(cmd)

您可能想要重定向 stdout 和 stderr 在某个地方,你可以通过传球来做到这一点 stdout=<file_obj> 到了 Popen 构造函数。


10
2018-01-20 20:54



因此,根据这一点,“daemon_process”应当等于像“在/ usr / bin中/ pyton /path/to/my/second/pythonscript.py”? - Javier Novoa C.
@JavierNovoaC。 Popen 获取参数列表。我会编辑我的答案以澄清。 - Rob Wouters
谢谢!那工作;) - Javier Novoa C.
我可以添加这个问题(这对我来说非常有用),可以使用实时输出 subprocess.Popen(cmd, stdout=sys.stdout, stderr=sys.stderr)?谢谢。 - Brandt


答案:


您可以使用 subprocess.Popen 为了这:

import subprocess

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py']
subprocess.Popen(cmd)

您可能想要重定向 stdout 和 stderr 在某个地方,你可以通过传球来做到这一点 stdout=<file_obj> 到了 Popen 构造函数。


10
2018-01-20 20:54



因此,根据这一点,“daemon_process”应当等于像“在/ usr / bin中/ pyton /path/to/my/second/pythonscript.py”? - Javier Novoa C.
@JavierNovoaC。 Popen 获取参数列表。我会编辑我的答案以澄清。 - Rob Wouters
谢谢!那工作;) - Javier Novoa C.
我可以添加这个问题(这对我来说非常有用),可以使用实时输出 subprocess.Popen(cmd, stdout=sys.stdout, stderr=sys.stderr)?谢谢。 - Brandt


“守护进程”具有比“后台进程”更具体的定义。默认 Popen 将执行一个子进程并将控制权交还给您的程序以继续运行。然而,只字未提处理信号(值得注意的是,如果SIGHUP用户退出其前壳你的后台进程完成)或从标准输入断开,标准错误,stdout和任何其他文件描述符打开你调用时间 Popen。 如果你真的想要一个守护进程,你应该使用 蟒蛇守护 模块,PEP 3143的实施。它负责您不想考虑的重要部分。


4
2017-09-30 19:45