Python 如何为具有环境变量的文件提供源代码
我有一个包含环境变量的源文件(很少有环境变量是基于条件的)。 源文件类似(文件名:global\u setup) 我想使用python脚本来获取这个文件的源代码。代码如下:Python 如何为具有环境变量的文件提供源代码,python,python-3.x,bash,sh,csh,Python,Python 3.x,Bash,Sh,Csh,我有一个包含环境变量的源文件(很少有环境变量是基于条件的)。 源文件类似(文件名:global\u setup) 我想使用python脚本来获取这个文件的源代码。代码如下: import subprocess import os if os.path.isfile('global_setup'): subprocess.call(['/bin/csh', '-c', 'source ~/global_setup'], shell=True) else: print("file
import subprocess
import os
if os.path.isfile('global_setup'):
subprocess.call(['/bin/csh', '-c', 'source ~/global_setup'], shell=True)
else:
print("file not found");
但这是行不通的。将错误显示为:
/主/全局\u设置:第53行:语法错误:文件意外结束
此外,我还试图通过将文件格式更改为Unix来删除此EOF错误。
即使它能工作,我也怀疑安装程序是否能在其他终端上完成,因为我正在使用python中的subprocess.call()。您不应该这样做,而是应该做以下两件事之一:
dotenv
文件在我看来,在运行时使用subprocess来寻找它比在运行时使用subprocess来寻找它更容易。使用
subprocess.call()来寻找文件不会对Python中的环境变量产生影响,因为subprocess
运行子流程
如果希望在Python解释器中影响os.environ
,则需要自己解析文件
因为您的文件是csh样式的,所以其他非常好的模块在这里不起作用
不过,您可以做的是调用
env = subprocess.check_output(['/bin/csh', '-c', 'source ~/global_setup; printenv'], shell=True)
并逐行解析生成的env
变量,并将内容添加到os.environ
中。这样,global\u setup
中的条件也将按预期工作
env = subprocess.check_output(['/bin/csh', '-c', 'source ~/global_setup; printenv'], shell=True)