0

每当我尝试使用subprocess.call()or运行 shell 脚本os.system()时,脚本就会运行,但 Python 脚本也会终止,并且在调用之后编写的所有内容都不会执行。我尝试从库中导入此调用并使用单独的 python 脚本运行或执行它,execfile()但同样的事情也发生在那里。我的系统有问题吗,还是应该这样?如果是后者,那么在进行此子进程/系统调用后,我将如何停止此操作并保持我的 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$

这是外壳脚本:

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

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

提前致谢!

4

1 回答 1

3

shell 并没有杀死你的脚本,它正在做你要求它做的事情,开始一个新的交互式 bash 会话。请注意,在调用 subprocess 之后,如果我执行 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 会话即可工作。我不确定您为什么要使用 export 但您是否考虑过os.environ['SOMEPATHNAME'] = "/some/path/here". 这将在你使用之前在你的 python 脚本中设置环境变量subprocess.call

于 2012-04-06T15:30:57.580 回答