python - Git-Bash 正在插入环境变量

标签 python python-3.x environment-variables git-bash msys

我想知道是否有人可以解释以下奇怪的行为:

我有一个使用 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/

相关文章:

python - 有效地找到两个二维 numpy 数组的行交集

python - 循环 URL 列表并保存为 txt 文件

python - 如何解析差距?

java - System.getenv ("ProgramFiles") 返回 C :\Program Files (x86)

environment-variables - 如何恢复已删除的环境变量?

c# - 在 Visual Studio C# 的调试 session 中将环境变量指定为命令行参数

java - Python和java在处理apache beam框架时有什么区别?

python - Heroku:应用程序与 buildpack 不兼容:

python - 如何最有效地将方形numpy矩阵 reshape 为对角线结构的 "diamond"

python - 从Python列表中的每个数字中减去一个值?