将python子进程作为守护进程调用并退出
我正在使用一对python程序,其中一个应该调用第二个 但这样做的方式应该是,第一个程序使第二个程序成为守护进程(或在后台进程中运行),然后退出,而不必等待第二个程序结束 这在Python中可能吗 我一直在研究os.fork,子流程模块,但我很困惑,因为实现这一点的正确方法…您可以使用以下方法:将python子进程作为守护进程调用并退出,python,daemon,python-2.x,Python,Daemon,Python 2.x,我正在使用一对python程序,其中一个应该调用第二个 但这样做的方式应该是,第一个程序使第二个程序成为守护进程(或在后台进程中运行),然后退出,而不必等待第二个程序结束 这在Python中可能吗 我一直在研究os.fork,子流程模块,但我很困惑,因为实现这一点的正确方法…您可以使用以下方法: import subprocess cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py'] subprocess.Popen(c
import subprocess
cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py']
subprocess.Popen(cmd)
您可能希望将stdout
和stderr
重定向到某个地方,您可以通过将stdout=
传递到Popen
构造函数来实现这一点。守护进程的定义比“后台进程”更为具体。默认情况下,Popen
将执行一个子进程,并将控制权交还给您的程序以继续运行。但是,这并不是说要处理信号(特别是,如果用户在后台进程完成之前退出shell,就会出现SIGHUP),也不是说要断开与stdin、stderr、stdout以及在调用Popen
时打开的任何其他文件描述符的连接。
如果你真的想要一个守护进程,你应该使用模块,一个PEP3143的实现。这会考虑到你不想考虑的总体部分。因此,根据这一点,“守护进程”应该等于“/usr/bin/pyton/path/to/my/second/pythonscript.py”?@JavierNovoaC
Popen
获取参数列表。我将编辑我的答案以澄清问题。我是否可以补充这个问题(这对我非常有用),即使用subprocess.Popen(cmd,stdout=sys.stdout,stderr=sys.stderr
)可以获得实时输出?谢谢。这是Python 2吗?我无法让它在Python3.7.8中工作(并将stdout/stderr发送到devnull)。到目前为止,似乎很难对一个过程进行后台监控。