在 tcsh 打开表单中设置环境 python

set environment in tcsh opened form python

我在 tc shell 工作,并使用 setenv foo bar 等命令设置环境脚本。我通过命令 source set_env.sh 使用 运行 这个脚本,然后,当设置环境时, 运行 编译命令 make my_ target...

我想通过调用 subprocess.Popen 甚至 os.system 从 Python 执行它来自动化整个过程。烦恼是:

  1. Shell 打开的表单 Python 无法识别命令 source。我假设/bin/bashshell是打开的。我如何强制Python打开/bin/tcsh?
  2. 如何为第二个命令 (make my_ target...) 保留更改的环境设置?

如果您在 Python 中使用 subprocess 包,那么默认情况下它不会 运行 shell,它只会启动一个进程(不使用shell)。您可以添加 shell=True,但这对您没有多大帮助,因为环境变量仅为 current 进程设置,并且不会发送回父进程。

Python启动一个tcsh子进程,子进程不能影响父进程。

解决方案是让您的脚本打印出环境变量,然后在 Python.

中解析它的输出

因此,如果您的脚本打印如下内容:

XX=one
YY=two

然后在 Python 中做一些类似的事情:

for line in output.split('\n'):
    if line == '':
        continue
    k, v = line.split('=')
    os.environ[k] = v