我想使用 python 独立运行执行 python 脚本作为 UNIX shell 命令Popen。
Script1.py:该脚本将采用多个参数。
Script2.py:该脚本将解析一些条件并准备调用所需的必要参数Script1.py
假设Script2.py解析了一些条件并准备了一个命令来运行 Script1.py
Command:python 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?
将进程与其父进程分离的方法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)