从subprocess.Popen调用“ source”命令
问题内容:
我有一个.sh脚本可供调用source the_script.sh
。定期调用此方法很好。但是,我试图通过python脚本调用它subprocess.Popen
。
从Popen调用它,在以下两个场景调用中出现以下错误:
foo = subprocess.Popen("source the_script.sh")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
>>> foo = subprocess.Popen("source the_script.sh", shell = True)
>>> /bin/sh: source: not found
是什么赋予了?当我可以在python之外访问时,为什么不能从Popen调用“源”?
问题答案:
source
不是可执行命令,而是内置的shell。
使用的最常见情况source
是运行更改环境的Shell脚本并将该环境保留在当前Shell中。这就是virtualenv修改默认python环境的方式。
创建一个子流程并source
在该子流程中使用可能不会做任何有用的事情,也不会修改父流程的环境,使用源脚本的任何副作用都不会发生。
Python有一个类似的命令,execfile
该命令使用当前的python全局命名空间(如果提供,则使用另一个)来运行指定的文件,您可以使用与bash命令类似的方式source
。