每当我尝试使用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进程随之终止。
提前致谢!
答案 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脚本中设置环境变量。