windows 使用python启动独立进程

rm5edbpk  于 2022-12-24  发布在  Windows
关注(0)|答案(3)|浏览(183)

我有一个python脚本,我想启动一个独立的守护进程。我想调用ym python脚本,启动这个系统托盘守护进程,在一个数据库文件上做一些python魔术,然后退出,让系统托盘守护进程继续运行。
我试过os.systemsubprocess.callsubprocess.Popenos.execl,但它总是让我的脚本保持活动状态,直到我关闭系统托盘守护进程。
这听起来应该是一个简单的解决方案,但我不能得到任何工作。

2cmtqfgy

2cmtqfgy1#

您可以使用两个漂亮的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至关重要)。

avwztpqn

avwztpqn2#

适用于Windows的解决方案:第一个月
工作起来就像你双击了一个可执行文件,并导致它独立启动。一个非常方便的一行程序。
http://docs.python.org/library/os.html?highlight=startfile#os.startfile

izkcnapc

izkcnapc3#

我建议使用双叉法。
示例:

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

相关问题