我有一个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'))
您能帮我解决我错的地方还是其他可以实现这一目标的方法吗?
谢谢。
答案 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
可以避免启用延迟
必要时进行扩展。