【发布时间】:2019-02-09 16:14:59
【问题描述】:
我有一个 bat 文件,其中设置了一些环境变量,例如
@echo off
SET MY_ENV_VAR=C:\temp
我想通过 Python 运行这个 bat 文件并运行其他依赖于这个环境变量 bat 集的可执行文件。但是即使bat文件运行,我也无法通过Python看到环境变量
subprocess.call(['path_to_bat_file\file.bat'], shell = False)
print(os.environ['MY_ENV_VAR'])
我尝试将 Shell 设置为 True 并添加我在互联网上找到的其他参数,但没有任何成功。它在 os.environ 上给出了 MY_ENV_VAR 未找到的 KeyError。当我在运行 python 脚本之前手动运行 bat 文件时,一切都按预期工作。
感谢任何帮助。
谢谢,
【问题讨论】:
-
发生这种情况是因为您的
subprocess.call()设置了一个新 进程。您在那里设置环境变量。批处理文件结束,进程终止。关联的环境消失。在您的代码的下一行中,您拥有 Python 解释器启动的环境。在运行 Python 代码之前运行 .bat 文件时,.bat 文件和 Python 代码都在同一进程中运行。相反,通过直接为os.environ['MY_ENV_VAR']赋值来设置您的环境变量。 -
我找不到在主线程中运行 bat 文件的方法。有可能吗?
-
您不需要运行 .bat 文件来设置 Windows 环境变量。这很好,因为您不能在主线程中运行 .bat。
-
我在主 bat 文件中有 150 个环境变量。我不想在 python 脚本中携带它们:)
-
让脚本从 .bat 文件中读取它们。解析一堆
SET语句应该很容易。当然,除非它们相互引用,这会使其变得更加困难。
标签: python python-3.x subprocess