【发布时间】:2012-02-15 09:22:14
【问题描述】:
我正在使用一对 python 程序,其中一个应该调用第二个。
但这应该通过第一个程序使第二个程序成为守护进程(或在后台进程中运行)然后退出,而不等待第二个程序结束的方式来完成。
这在 Python 中可行吗?
我一直在查看 os.fork,子进程模块,但我很困惑实现这一目标的正确方法......
【问题讨论】:
标签: python daemon python-2.x
我正在使用一对 python 程序,其中一个应该调用第二个。
但这应该通过第一个程序使第二个程序成为守护进程(或在后台进程中运行)然后退出,而不等待第二个程序结束的方式来完成。
这在 Python 中可行吗?
我一直在查看 os.fork,子进程模块,但我很困惑实现这一目标的正确方法......
【问题讨论】:
标签: python daemon python-2.x
您可以为此使用subprocess.Popen:
import subprocess
cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py']
subprocess.Popen(cmd)
您可能希望将stdout 和stderr 重定向到某个地方,您可以通过将stdout=<file_obj> 传递给Popen 构造函数来实现。
【讨论】:
Popen 接受参数列表。我将编辑我的答案以澄清。
subprocess.Popen(cmd, stdout=sys.stdout, stderr=sys.stderr 获得实时输出)?谢谢。
“守护进程”具有比“后台进程”更具体的定义。默认情况下,Popen 将执行一个子进程并将控制权交还给您的程序以继续运行。但是,这并没有说明处理信号(特别是 SIGHUP,如果用户在后台进程完成之前退出他们的 shell)或断开与您调用 Popen 时打开的标准输入、标准错误、标准输出和任何其他文件描述符的连接。
如果你真的想要一个守护进程,你应该使用 python-daemon 模块,这是 PEP 3143 的一个实现。这会处理你不想考虑的粗略部分。
【讨论】: