【问题标题】:How to access Batch Script variables in python?如何在python中访问批处理脚本变量?
【发布时间】:2019-03-26 13:54:06
【问题描述】:

我有一个设置变量值的 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'))

您能帮我解决我的错误或任何其他方法吗?

提前致谢。

【问题讨论】:

  • 您只需要读取用户名和密码还是稍后保存?您可能会在这里找到答案:stackoverflow.com/questions/40914880/…
  • 首先,变量、值和=之间永远不要有空格,它应该是set "USERNAME=username"然后发送它,你需要让python脚本首先读取输入参数,然后简单地发送它从批处理文件到pythin脚本为python script.py %USERNAME% %PASSWORD%
  • @GittingGud,谢谢你的链接。我也有同样的想法,但它更像是搜索一个字符串并找到它的值,然后是 =。有没有类似于调用设置变量的bat文件并在批处理脚本中使用%USERNAME%等变量的方法?
  • @JeffZeitlin,我看过它并尝试了答案。输出是 None 。我发布了我的 python 脚本,以便您可以帮助纠正它。

标签: python batch-file


【解决方案1】:
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,环境变量 在运行env.bat 之后,将在cmd 的同一进程中可用。 这允许 echo 的值 !USERNAME!!PASSWORD! 到 标准输出流。

cmd的选项:

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

注意:

  • Python 2Python 3 中测试。 Python 2 缺少对 带有subprocess 的上下文管理器,因此未使用with 语句。

  • USERNAME 环境变量是一个内置名称。 无正当理由更改它可能会产生意想不到的问题。

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

【讨论】:

    【解决方案2】:

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

    SETX USERNAME=username
    SETX PASSWORD=password
    

    【讨论】:

    • 我已经尝试了上述解决方案,不幸的是我仍然得到 None 作为我的输出。一件事是我不想更改其他批处理脚本使用的bat文件中的代码。
    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 2011-02-10
    • 2012-01-26
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多