【发布时间】:2023-03-21 07:05:01
【问题描述】:
我需要在 Windows 上编写一个脚本,调用批处理文件来设置一些环境变量,然后执行一些利用这些环境变量的操作。
如果调用脚本本身是一个批处理文件,这可以正常工作。
能够在 Python 中编写调用脚本会有一些优势,但是当我尝试这样做时,批处理文件设置的环境变量在它返回后不会持续存在。我猜那是因为subprocess.check_call(..., shell=True) 生成了一个新的命令 shell 副本,当它在批处理文件末尾终止时,它会带上环境变量。
有没有办法让环境变量在由 Python 调用的批处理文件设置时保持不变,还是让调用脚本本身成为批处理文件更好?
【问题讨论】:
-
为什么不用
os.environ直接在python中设置环境变量呢?我对为什么需要调用这个其他脚本感到困惑 -
@JoranBeasley 因为我没有写批处理文件;它是 Microsoft C++ 附带的,用于为编译器设置环境变量。当然,我可以对其进行逆向工程,但据我所知,对于下一版本的 Microsoft C++,结果可能不正确。
-
oh I c ...你能不能写一个批处理文件来调用那些其他批处理文件然后调用python脚本(所以它得到了环境变量)? afaik 没有办法将孩子的环境变量传回给父母
-
@JoranBeasley 真;将我的脚本放在一个文件中会更简洁,但如有必要,我可以将其拆分为两个文件。
-
复制或重用来自
distutils.msvc9compiler.query_vcvarsall的代码。注意它是如何将& set添加到命令中以输出环境变量的。
标签: python windows shell batch-file cmd