【发布时间】:2016-07-12 16:36:17
【问题描述】:
我正在努力将较旧的批处理文件系统转换为 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”。我也有同样的行为。
【问题讨论】:
-
我不确定您所说的为调用它的批处理文件设置环境变量的批处理文件是什么意思。子进程不可能改变调用进程的环境。一个批处理文件最多可以向调用者返回一些输出,调用者可以检查这些输出,然后决定改变自己的环境。
-
根据我对 .bat 文件的理解,调用命令在同一环境中运行目标 .bat 文件。
-
任何通过
call subprog.bat调用并且NOT 包含setlocal命令的批处理文件都可以改变调用者批处理文件的环境... -
我没有意识到
call正在被使用。我的错。 -
@JohnGordon 没问题。我更新了我的问题以更好地反映用例以帮助消除混淆。
标签: python windows python-3.x batch-file popen