Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python启动独立进程_Python_Windows_Process_Subprocess_Daemon - Fatal编程技术网

使用python启动独立进程

使用python启动独立进程,python,windows,process,subprocess,daemon,Python,Windows,Process,Subprocess,Daemon,这真的是一个很简单的问题,但我似乎找不到任何解决办法 我有一个python脚本,我想启动一个独立的守护进程。我想调用ym python脚本,启动这个系统托盘dameon,对数据库文件执行一些python魔术,然后退出,让系统托盘守护进程运行 我尝试了os.system,subprocess.call,subprocess.Popen,os.execl,但它总是让我的脚本保持活动状态,直到我关闭系统托盘守护进程 这听起来应该是一个简单的解决方案,但我什么都做不到 编辑: Windows解决方案:o

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

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

我尝试了
os.system
subprocess.call
subprocess.Popen
os.execl
,但它总是让我的脚本保持活动状态,直到我关闭系统托盘守护进程

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

编辑: Windows解决方案:
os.startfile()


有时候,放弃和提问意味着你正处在答案的尖端。

我建议使用双叉法

例如:

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

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


您可以使用几个漂亮的
Popen
参数在Windows上完成真正独立的进程(感谢greenhat的帮助):


另请参阅,以获得一个漂亮的跨平台版本(确保添加
close\u fds
,尽管这对Windows非常重要)。

搜索将找到答案。是的,我找到了,但没用。脚本只挂起几秒钟,不启动第二个进程,也不执行脚本的其余部分。然后它就死了。我不会在没有搜索和尝试自己解决问题的情况下发布问题。啊,好吧,抱歉这么严厉。嗯,奇怪的是,我会检查一些东西,如果我弄明白了就回来。不过,我确实忘了在原始帖子中包含
os.spawn*
。这是我在放弃几个小时来清醒头脑和吃午饭之前第一次尝试的方法之一。不幸的是,这不允许传递args。这对我来说是有效的,应该是IMO接受的答案。它仍然允许传递args,而接受的答案不允许。
os.fork()
在Windows上不可用。
import subprocess

DETACHED_PROCESS = 0x00000008
results = subprocess.Popen(['notepad.exe'],
                           close_fds=True, creationflags=DETACHED_PROCESS)
print(results.pid)