这真是一个非常简单的问题,但我似乎无法找到任何解决方案。
我有一个python脚本,我想启动一个独立的守护程序进程。我想调用ym python脚本,启动这个系统托盘dameon,在数据库文件上做一些python魔法并退出,让系统托盘守护进程运行。
我已尝试os.system
,subprocess.call
,subprocess.Popen
,os.execl
,但它始终保持我的脚本处于活动状态,直到我关闭系统托盘守护程序。
这听起来应该是一个简单的解决方案,但我无法工作。
编辑:
Windows解决方案:os.startfile()
http://docs.python.org/library/os.html?highlight=startfile#os.startfile
有时放弃和提问意味着你只是在答案的尖端。
答案 0 :(得分:3)
Windows解决方案:os.startfile()
就像双击可执行文件并使其独立启动一样。一个非常方便的一个班轮。
http://docs.python.org/library/os.html?highlight=startfile#os.startfile
答案 1 :(得分:2)
我建议使用双叉方法。
示例:
import os
import sys
import time
def main():
fh = open('log', 'a')
while True:
fh.write('Still alive!')
fh.flush()
time.sleep(1)
def _fork():
try:
pid = os.fork()
if pid > 0:
sys.exit(0)
except OSError, e:
print >>sys.stderr, 'Unable to fork: %d (%s)' % (e.errno, e.strerror)
sys.exit(1)
def fork():
_fork()
# remove references from the main process
os.chdir('/')
os.setsid()
os.umask(0)
_fork()
if __name__ == '__main__':
fork()
main()
答案 2 :(得分:1)
你可以使用一些漂亮的Popen
参数在Windows上完成一个真正的分离过程(感谢他的answer here的绿帽):
import subprocess
DETACHED_PROCESS = 0x00000008
results = subprocess.Popen(['notepad.exe'],
close_fds=True, creationflags=DETACHED_PROCESS)
print(results.pid)
另请参阅this answer了解一个漂亮的跨平台版本(请务必添加close_fds
,因为它对Windows至关重要。)