在 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 执行它来自动化整个过程。烦恼是:
- Shell 打开的表单 Python 无法识别命令
source
。我假设/bin/bashshell是打开的。我如何强制Python打开/bin/tcsh?
- 如何为第二个命令 (
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
我在 tc shell 工作,并使用 setenv foo bar
等命令设置环境脚本。我通过命令 source set_env.sh
使用 运行 这个脚本,然后,当设置环境时, 运行 编译命令 make my_ target...
我想通过调用 subprocess.Popen
甚至 os.system
从 Python 执行它来自动化整个过程。烦恼是:
- Shell 打开的表单 Python 无法识别命令
source
。我假设/bin/bashshell是打开的。我如何强制Python打开/bin/tcsh? - 如何为第二个命令 (
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