我使用了一对python程序,其中一个应该调用第二个。
但是这应该以第一个程序使第二个程序成为守护程序(或在后台进程中运行)的方式完成,然后退出,而不等待第二个程序结束。
这在Python中是否可行?
我一直在关注os.fork,子流程模块,但我很困惑,因为这是实现这个目标的正确方法......
答案 0 :(得分:12)
您可以使用subprocess.Popen
:
import subprocess
cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py']
subprocess.Popen(cmd)
您可能希望将stdout
和stderr
重定向到某处,您可以将stdout=<file_obj>
传递给Popen
构造函数。
答案 1 :(得分:7)
“守护进程”带有比“后台进程”更具体的定义。默认情况下,Popen
将执行子进程并将控制权交还给程序以继续运行。但是,这没有说明处理信号(特别是,如果用户在后台进程完成之前退出shell)或断开stdin,stderr,stdout以及在调用Popen
时打开的任何其他文件描述符。
如果你真的想要一个守护进程,你应该使用python-daemon模块,这是PEP 3143的一个实现。这会照顾你不想考虑的重要部分。