使用 Popen 独立运行 python 子进程

Bha*_*h K 4 python linux

我想使用 python 独立运行执行 python 脚本作为 UNIX shell 命令Popen

Script1.py:该脚本将采用多个参数。 Script2.py:该脚本将解析一些条件并准备调用所需的必要参数Script1.py

假设Script2.py解析了一些条件并准备了一个命令来运行 Script1.py Commandpython Script1.py arg1 arg2 arg3

当前运行脚本为:

proc=subprocess.Popen(Command,shell=True,stdout=None, stderr=None)
Run Code Online (Sandbox Code Playgroud)

但是,当我Script2.py手动杀死(使用 CTRL+C)时,我可以看到 Script1.py 也被杀死/终止。

如何Script1.py独立运行而不用担心 的状态Script2.py

Ped*_*ito 6

将进程与其父进程分离的方法window$是:

from subprocess import Popen

CREATE_NEW_PROCESS_GROUP = 0x00000200
DETACHED_PROCESS = 0x00000008
Popen(['python', 'drive:/path/to/loop_test.py', 'some_arg', 'another_arg'],
                 stdin=None, stdout=None, stderr=None, shell=True,
                 creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP
                 )
Run Code Online (Sandbox Code Playgroud)

linux您应该能够使用nohupand实现相同的效果,即preexec_fn=os.setpgrp

Popen(['nohup', 'python', '/path/to/loop_test.py', 'some_arg','another_arg'],
shell=True, stdout=None, stderr=None, preexec_fn=os.setpgrp )
Run Code Online (Sandbox Code Playgroud)

  • 谢谢...它成功了!你能让我知道“preexec_fn=os.setpgrp”会做什么吗? (4认同)