如何获取具有环境变量的文件

时间:2019-05-27 06:26:29

标签: python python-3.x bash sh csh

我有一个包含环境变量的源文件(很少有环境变量也是基于条件的)。 源文件就像(文件名: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()。

2 个答案:

答案 0 :(得分:0)

您应该执行以下两项操作之一,而不是这样做:

  1. 在调用脚本之前,在 中在linux shell中提供文件。
  2. 将文件转换为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中的条件也将按预期工作。