2017-04-17 50 views
1

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

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),我可以看到,脚本1.py也被杀死/终止。

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

回答

0

从母公司分离上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) 
+0

谢谢.. ..有效!。 您能否让我知道“preexec_fn = os.setpgrp”会做什么? –