Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python子进程作为守护进程调用并退出_Python_Daemon_Python 2.x - Fatal编程技术网

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

将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

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

但这样做的方式应该是,第一个程序使第二个程序成为守护进程(或在后台进程中运行),然后退出,而不必等待第二个程序结束

这在Python中可能吗

我一直在研究os.fork,子流程模块,但我很困惑,因为实现这一点的正确方法…

您可以使用以下方法:

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)。到目前为止,似乎很难对一个过程进行后台监控。