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

我有一个包含环境变量的源文件(很少有环境变量是基于条件的)。 源文件类似(文件名: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 not found");
但这是行不通的。将错误显示为:

/主/全局\u设置:第53行:语法错误:文件意外结束

此外,我还试图通过将文件格式更改为Unix来删除此EOF错误。
即使它能工作,我也怀疑安装程序是否能在其他终端上完成,因为我正在使用python中的subprocess.call()。

您不应该这样做,而是应该做以下两件事之一:

  • 在调用脚本之前,在linux shell中对文件进行源代码设置
  • 将文件转换为Python可以使用Python dotenv模块读取的
    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)