我正在调用一个批处理文件(.bat),该文件从我的python脚本中初始化了ENV变量。但是,当我在os.environ中注册这些变量时,变量名称在UpperCase中,并且值尊重输入的内容。
这是一个简单的例子。 ProfileEnv.bat文件包含:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]
我的Python脚本MyProg.py包含
@echo off
set abcd_EFG=\\MYCOMPUTER\PrJ\tools\cpcp\cpcp%1
MyProg.bat文件仅在此处显示环境变量
from subprocess import check_output
import sys, os, platform
def main():
if "abcd_EFG" in os.environ:
print("abcd_EFG already set to "+os.environ['abcd_EFG']);
else:
CMD="ProfileEnv.bat v2>nul 2>&1 && set";
varsCmd=check_output(CMD, shell=True).decode("utf-8", "strict");
for var in varsCmd.splitlines():
k,_,v=map(str.strip, var.strip().partition('='));
print("set var "+k);
os.environ[k] = v;
os.system("call MyProg.bat");
if __name__ == '__main__':
main();
案例1 运行结果“ python MyProg.py”
@echo off
call set
案例2 运行第一个“ ProfileEnv.bat v2> nul 2>&1 && set”结果
set var abcd_EFG
ABCD_EFG=\\MYCOMPUTER\PrJ\tools\cpcp\cpcpv2
然后生成“ python MyProg.py”
abcd_EFG=\\MYCOMPUTER\PrJ\tools\cpcp\cpcpv2
在两种情况下,我希望得到相同的结果,因为在python脚本中调用“ os.environ [k] = v”时,变量和值的CASE都可以。 此外,仅变量名的CASE被修改(更改为UPPER CASE),而不是其值。 我的问题是,在我的实际用例中,我不控制 ProfileEnv.bat (包含许多变量),也不控制 MyProg.bat ,后者在其中启动JAVA代码, ,在情况1 中,变量显示为未设置。
感谢您的帮助。