初始化的环境变量总是大写

时间:2019-02-18 19:11:08

标签: python-3.x

我正在调用一个批处理文件(.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 中,变量显示为未设置。

感谢您的帮助。

0 个答案:

没有答案