使用python启动独立进程

2024-05-14 19:24:53 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个很简单的问题,但我似乎找不到任何解决办法。

我有一个python脚本,我想启动一个独立的守护进程。我想调用ym python脚本,启动这个系统托盘dameon,对数据库文件执行一些python魔术,然后退出,让系统托盘守护进程继续运行。

我试过os.systemsubprocess.callsubprocess.Popenos.execl,但它总是让我的脚本保持活动状态,直到我关闭系统托盘守护程序。

这听起来应该是一个简单的解决方案,但我什么也做不到。

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

有时候放弃和问意味着你就在答案的尖端。


Tags: 文件脚本数据库进程os魔术解决方案call
3条回答

我建议使用双叉法。

示例:

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()

Windows解决方案:os.startfile()

就像双击可执行文件并使其独立启动一样。一条非常方便的单行线。

http://docs.python.org/library/os.html?highlight=startfile#os.startfile

您可以使用几个漂亮的Popen参数在Windows上完成真正分离的进程(感谢greenhat的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非常重要)。

相关问题 更多 >

    热门问题