如何阻止子进程终止我的脚本?

如何阻止子进程终止我的脚本?

问题描述:

无论何时我试图运行使用subprocess.call()os.system()的shell脚本,脚本都会运行,但Python脚本也会终止,并且在调用之后编写的所有内容都不会执行。我曾尝试从库中导入此调用,并使用execfile()从单独的python脚本运行或执行它,但同样的事情也发生在那里。我的系统有什么问题吗?或者它是这样的?如果是后者,那么我应该如何阻止这个并且在进行这个子进程/系统调用之后让我的Python脚本继续运行?如何阻止子进程终止我的脚本?

[email protected]:~/Desktop$ python 
Python 2.7.2+ (default, Oct 4 2011, 20:03:08) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> subprocess.call(["sh","test.sh"]) 
[email protected]:~/Desktop$ 

这是shell脚本:

export <SOMEPATHNAME>=/some/path/here 
exec $SHELL -i 

我认为这是导致在那个特定的外壳终止运行的所有程序的exec $SHELL -i。但我不知道我有什么其他的选择。如果我不使用它,export不起作用。目前,我想要导出的路径是导出,但是Python进程随之一起终止。

在此先感谢!

+0

显示您的脚本。您可能不会遇到发生的异常。 – marue 2012-04-06 14:31:50

+0

SHOW ... CODE。只有你知道这个问题的背景。我们其他人不知道你在尝试什么,结果如何。 – jdi 2012-04-06 14:32:31

+0

对不起,添加它会延迟。我已经添加了代码。 – 2012-04-06 14:44:25

shell不会杀死你的脚本,它完全按照你要求的方式执行,开始一个新的交互式bash会话。注意,在调用子进程后,如果我做了一个ps,python仍在运行。更进一步,如果您退出bash会话,它会将您带回python解释器/脚本。

[email protected]:~$ python 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> subprocess.call(['sh', 'test.sh']) 
[email protected]:~$ ps 
    PID TTY   TIME CMD 
1412 pts/3 00:00:00 bash 
1485 pts/3 00:00:00 python 
1486 pts/3 00:00:00 bash 
1509 pts/3 00:00:00 ps 
[email protected]:~$ exit 
exit 
0 
>>> print "im back in python" 
"im back in python" 
>>> exit() 

导出应该不需要你开始一个新的bash会话工作。我不确定你为什么使用导出,但是你考虑过os.environ['SOMEPATHNAME'] = "/some/path/here"。这会在您使用subprocess.call之前在您的python脚本中设置环境变量。

+0

是的,我尝试过,但我想设置一个在整个系统中持久的环境变量。有没有其他的方法可以调用一个shell脚本来设置一个在整个系统中持久化的变量? – 2012-04-06 15:41:32

+0

贯穿整个系统?这意味着您在一个脚本中更改了变量,并且它在另一个已经运行的脚本中也发生了变化我不知道这是可能的(这听起来不是一个好主意)。 – 2012-04-06 15:43:39

+0

是的,我希望它永久设置。如果我打开任何其他shell并查询'env | grep“variablename”',我应该看到结果。 – 2012-04-06 15:49:36