Is it possible to call init_env.bat from python in a way that allows
init_env.bat to alter the environment of the calling scripts
process?
虽然不容易,但是,如果init_env.bat非常简单,您可以尝试解析它,并自己对os.environ进行更改。在
否则,在子shell中生成它要容易得多,然后调用set以输出新的环境变量,并从中解析输出。在
以下是对我有用的。。。在
初始化_环境蝙蝠@echo off
set FOO=foo
set BAR=bar
足球俱乐部.bat
^{pr2}$
主.pyimport sys, os, subprocess
INIT_ENV_BAT = 'init_env.bat'
FOOBAR_EXE = 'foobar.bat'
def init_env():
vars = subprocess.check_output([INIT_ENV_BAT, '&&', 'set'], shell=True)
for var in vars.splitlines():
k, _, v = map(str.strip, var.strip().partition('='))
if k.startswith('?'):
continue
os.environ[k] = v
def main():
init_env()
subprocess.check_call(FOOBAR_EXE, shell=True)
subprocess.check_call(FOOBAR_EXE, shell=True)
if __name__ == '__main__':
main()
…其中python main.py输出。。。在FOO=foo
BAR=bar
FOO=foo
BAR=bar
请注意,我只使用批处理文件来代替您的foobar.exe,因为我手头没有.exe文件来确认环境变量是否已设置。在
如果使用的是.exe文件,可以从subprocess.check_call(FOOBAR_EXE, shell=True)行中删除shell=True子句。在