使用python启动一个独立的进程

时间:2012-07-20 18:42:13

标签: python windows process subprocess daemon

这真是一个非常简单的问题,但我似乎无法找到任何解决方案。

我有一个python脚本,我想启动一个独立的守护程序进程。我想调用ym python脚本,启动这个系统托盘dameon,在数据库文件上做一些python魔法并退出,让系统托盘守护进程运行。

我已尝试os.systemsubprocess.callsubprocess.Popenos.execl,但它始终保持我的脚本处于活动状态,直到我关闭系统托盘守护程序。

这听起来应该是一个简单的解决方案,但我无法工作。

编辑:  Windows解决方案:os.startfile() http://docs.python.org/library/os.html?highlight=startfile#os.startfile

有时放弃和提问意味着你只是在答案的尖端。

3 个答案:

答案 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至关重要。)