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

时间:2012-04-06 14:29:32

标签: python subprocess

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

shushens@P600:~/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"])
shushens@P600:~/Desktop$

这是shell脚本:

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

我认为是exec $SHELL -i导致在该特定shell上运行的所有程序终止。但我不知道我还有其他选择。如果我不使用它,export不起作用。目前,我要导出的路径是导出,但Python进程随之终止。

提前致谢!

1 个答案:

答案 0 :(得分:3)

shell不会杀死你的脚本,它正在按照你的要求去做,启动一个新的交互式bash会话。请注意,在调用子进程后,如果我执行ps,则python仍在运行。如果你退出bash会话,它会带你回到python解释器/脚本。

bago@bago-laptop:~$ 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'])
bago@bago-laptop:~$ 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
bago@bago-laptop:~$ exit
exit
0
>>> print "im back in python"
"im back in python"
>>> exit()

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