我有一个包含环境变量的源文件(很少有环境变量也是基于条件的)。 源文件就像(文件名:global_setup)
if( -f /tools/tool/bin) then
setenv SHELL /bin/csh
endif
setenv LICENCE_FILE 2457@abc
setenv ...........
我想使用python脚本来获取此文件。代码是这样的:
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");
但这不起作用。显示错误为:
/ home / global_setup:第53行:语法错误:文件意外结束
此外,我尝试通过将文件格式更改为Unix来消除此EOF错误。 即使它能正常工作,我也怀疑设置会在其他终端中完成,因为我正在python中使用subprocess.call()。
答案 0 :(得分:0)
您应该执行以下两项操作之一,而不是这样做:
dotenv
文件,Python可以使用Python-dotenv模块读取该文件。在IMO之前更容易进行采购,而不是在运行时使用子流程进行采购。
答案 1 :(得分:0)
使用subprocess.call()
为文件提供资源不会影响Python中的环境变量,因为subprocess
可以很好地运行一个子进程。
如果您希望影响Python解释器中的os.environ
,则需要自己解析文件。
由于您的文件是csh风格的文件,因此原本非常不错的envparse
模块将无法在此处运行。
但是您可以做的是调用
env = subprocess.check_output(['/bin/csh', '-c', 'source ~/global_setup; printenv'], shell=True)
并逐行分析所得的env
变量,并将内容添加到os.environ
中。这样,global_setup
中的条件也将按预期工作。