如何在python中访问批处理脚本变量?

时间:2019-03-26 13:54:07

标签: python batch-file

我有一个bat文件,该文件将值设置为变量,我需要在python脚本中使用这些变量。

env.bat:

SET USERNAME=username
SET PASSWORD=password

我需要在Python脚本中使用以上变量。我已经尝试过以下方法,但输出为 None

login.py

import os
import subprocess
subprocess.call(['env.bat'])
print(os.getenv('USERNAME'))

您能帮我解决我错的地方还是其他可以实现这一目标的方法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您正在使用write_string_nvs()来获取环境变量。因此,您需要在批处理文件中设置一个环境变量。可以使用this URL中所述的os.getenv()命令来完成。

SETX

答案 1 :(得分:0)

import os
import subprocess
p = subprocess.Popen(['cmd', '/v:on', '/q', '/c', 'env.bat', '&echo(!USERNAME!&echo(!PASSWORD!'], stdout=subprocess.PIPE, universal_newlines=True)
stdout, stderr = p.communicate()
username, password = stdout.splitlines()
print(username)
print(password)

由于env.bat不使用setlocal,因此环境变量 在运行cmd之后,将以与env.bat相同的过程可用。 这允许echo的{​​{1}}和!USERNAME!的值 标准输出流。

!PASSWORD!的选项:

  • cmd启用延迟扩展。
  • /v:on设置回显。
  • /q运行以下命令字符串。

注意:

  • Python 2 Python 3 中进行了测试。 Python 2 缺少对 上下文管理器和/c,因此未使用subprocess语句。

  • with环境变量是内置名称。 无正当理由进行更改可能会导致意外问题。

  • 启用延迟扩展后,可能需要在USERNAME中使用! 进行转义,否则env.bat可能在!解析文件时被省略。 命令行中的cmd可以避免启用延迟 必要时进行扩展。