从popen中检索环境变量

时间:2016-07-12 16:36:18

标签: python windows python-3.x batch-file popen

我正在努力将较旧的批处理文件系统转换为python。我遇到了一个批处理文件,它为调用它的批处理文件设置环境变量。然后在将来调用批处理文件时再次使用这些值。我的环境变量似乎会降低调用流量,但我无法将其恢复。我在这里已经阅读了两个不同的主题,它们谈论类似的东西,但它们并不完全相同。是否可以从子进程中检索这些环境变量?

Python subprocess/Popen with a modified environment

Set Environmental Variables in Python with Popen

我现在在做什么:

p = Popen(process_, cwd=wd, stdout=PIPE, shell=True,
          universal_newlines=True, stderr=STDOUT, env=env)

旧的bat文件流:

foo.bat calls foo-setparam.bat
foo-setparam.bat sets some variables
foo.bat uses these variables
foo.bat calls bar.bat
bar.bat uses variables set by both foo.bat and foo-setparam.bat

更新: 我试过在我的popen参数前添加“call”。我有同样的行为。

1 个答案:

答案 0 :(得分:1)

子进程通常不可能设置父环境变量,除非您想要在父进程中创建远程线程并使用该线程代表您设置变量的恶劣路径。

让python脚本编写包含一系列set命令的临时文件要容易得多:

set VAR1=newvalue1
set VAR2=newvalue2

然后修改调用批处理文件以调用python脚本,如:

python MyScript.py
call MyScript_Env.cmd