我想知道是否有人可以解释以下奇怪的行为:
我有一个使用 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
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”文件夹路径的变化是由于 Git Bash 更新到 v2.33.0.2-64bit。但问题还是一样。
最佳答案
这是 msys 的行为,msys 是编译 Git Bash 时使用的 Windows 兼容库。涵盖此行为的文档位于 https://www.msys2.org/docs/filesystem-paths/
可以使用环境变量将其关闭:
- 要完全关闭环境变量中的自动路径转换,请导出
MSYS2_ENV_CONV_EXCL='*'
- 仅对名为
random
的变量关闭它:export MSYS2_ENV_CONV_EXCL=random
关于python - Git-Bash 正在插入环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69286095/