使用Popen独立运行Python子进程

3
我想用Python的Popen命令独立地将一个Python脚本作为UNIX shell命令运行。 Script1.py: 这个脚本需要多个参数。 Script2.py: 这个脚本会解析一些条件,并准备好调用Script1.py所需的必要参数。
假设Script2.py解析了一些条件,并准备好了运行Script1.py的命令。 命令:python Script1.py arg1 arg2 arg3 目前的执行方式为:
proc=subprocess.Popen(Command,shell=True,stdout=None, stderr=None)

然而,当我手动杀死Script2.py(使用CTRL+C),我发现Script1.py也被杀死/终止了。

我该如何独立运行Script1.py,而无需担心Script2.py的状态?

1个回答

5
在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
                 )

Linux 上,您可以使用 nohuppreexec_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 )

4
谢谢...它起作用了!请问"preexec_fn=os.setpgrp"会做什么? - Bharath K
os.setpgrp()- 根据实现版本调用系统调用 setpgrp()setpgrp(0, 0)(如果有)。有关语义,请参见Unix手册。 - Pedro Lobito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接