【发布时间】:2021-11-16 00:44:52
【问题描述】:
我想知道是否有人可以解释以下奇怪的行为:
我有一个使用os.environ 的python 脚本来提取环境变量以与pysftp 一起使用。有问题的变量被称为“sftp_wd”和“sftp_wdir”,其值为“/etc/
>>> import os
>>> os.environ["sftp_wdir"]
cmd 中的这个 python 代码产生正确的值:/etc/...
但是当在 git bash 中运行时,值看起来像:<%USERPROFILE%/AppData/Local/Programs/Git>/etc/...
我在这两种情况下都使用相同的 conda 环境,并且在 vscode 调试器中运行时也会显示效果。此外,如果使用winpty 运行 python,我看不到这种效果。我查看了os.environ 上的文档以及 git bash 使用的环境变量,但没有找到任何可以解释这一点的东西。
printenv 也显示了正确的值,所以我倾向于认为这是特定于 git bash 初始化 python 的方式,但我似乎无法确定实际发生的情况
编辑:响应@CharlesDuffy,这似乎可以用任何环境变量和任何以“/”开头的值复制
例如,我创建了一个名为 random 的环境变量,其值为/var/。结果如下:
回声
$ echo $random
/var/
printf
$ printf '%q\n' "$random"
/var/
蟒蛇
$ python
Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)] :: Ana
conda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['random']
'C:/Program Files/Git/var/'
>>>
注意: 上面“Git”文件夹路径的变化是从更新到v2.33.0.2-64bit的Git Bash。问题还是一样。
【问题讨论】:
-
您是在 描述 shell 的输出,而不是 显示 该输出。我们两者都需要。理想情况下,显示命令
declare -p sftp_wdir的确切输出——或者,为了更稳健地对抗带有隐藏字符的值,printf '%q\n' "$sftp_wdir" -
顺便说一句,“git bash”最好被描述为“msys bash”。它不是由 git 团队制作的,也不是特定于 git 的; msys 是它编译的 Windows 兼容性库的名称。
标签: python python-3.x environment-variables git-bash msys