【问题标题】:Python os.getenv() returning incorrect value on Windows - Is there an alternative?Python os.getenv() 在 Windows 上返回不正确的值 - 有替代方案吗?
【发布时间】:2019-04-25 08:39:37
【问题描述】:

我正在使用 os.getenv() 将密码返回给 python 脚本。密码包含大写字母 I,当我将其保存为环境变量时,它会正确保存(保存后,如果我去编辑它并将其复制并粘贴到记事本中,它会正确显示)。然而,python os.getenv() 方法将大写 I 作为小写 l 返回。有没有其他人遇到过这个和/或我可以使用任何其他方法来返回环境变量?

【问题讨论】:

    标签: python python-3.x encoding environment-variables


    【解决方案1】:

    不,别无选择,这不可能是 Python 的错。

    在 Windows 上,os.environ 映射在 Python 启动时从 _wenviron global 初始化。 (环境变量在进程开始运行时提供给它,如果稍后更改了环境变量,则需要重新启动进程)。 Windows 给 Python 的结构是 UTF-16,键总是大写,值是不透明的 Unicode 文本。

    Python 将数据从 UTF-16 解码为 Python str 对象(Python 2 中的 unicode),并从中创建一个 os.environ 映射。然后,该映射仅保持键的大写性质,没有其他任何更改。 os.getenv 是一个使用 os.environ.get() 的辅助函数。没有其他 API 可用或需要。

    如果您看到意外的数据,您要么在设置变量时出错,要么在 Python 启动后更改了变量。混合I(印度首都)和l(小写利马)很容易;最好避免混淆字符,例如 0(数字零)、O(大写 Oscar)、1(数字一)。

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2021-12-03
      • 2019-07-12
      相关资源
      最近更新 更多