Windows上的Python os.getenv()返回不正确的值-有替代方法吗?

时间:2018-11-22 16:08:14

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

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

1 个答案:

答案 0 :(得分:0)

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

在Windows上,当Python启动时,os.environ映射是从_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(大写的奥斯卡)和1(数字)。