gpt4 book ai didi

python - 在 Windows CMD 中更改卷时 sys.path 中的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 14:16:24 25 4
gpt4 key购买 nike

我刚刚注意到 sys.path 和 Windows CMD 的一些奇怪行为,想知道发生了什么以及为什么。

在下面两个例子中,我打印出sys.path,将volume改为D:cd进入一个目录,改变volume回到C:,最后再次打印出sys.path。我用两个非常相似的 PYTHONPATH 来做到这一点。

使用 PYTHONPATH=D:\:

C:\Users\z003w3we>python -c "import sys; print(sys.path)"
['', 'D:\\', <others>]

C:\Users\z003w3we>D:

D:\>cd UserData

D:\UserData>C:

C:\Users\z003w3we>python -c "import sys; print(sys.path)"
['', 'D:\\', <others>]

一切如预期。

使用 PYTHONPATH=D:(注意缺少尾随 \):

C:\Users\z003w3we>python -c "import sys; print(sys.path)"
['', 'D:\\', <others>]

C:\Users\z003w3we>D:

D:\>cd UserData

D:\UserData>C:

C:\Users\z003w3we>python -c "import sys; print(sys.path)"
['', 'D:\\UserData', <others>]

C:\Users\z003w3we>echo %PYTHONPATH%
D:

现在,我们在 sys.path 中突然有了 D:\UserData,而不是 D:。请注意,PYTHONPATH 未更改。

我无法使用 PowerShell 重现相同的行为;两个 PYTHONPATH 都表现出第一个行为。

正如我所说,我非常有兴趣了解这里发生的事情。

最佳答案

CMD 为驱动器 D: 上的工作目录设置了一个名为“=D:”的常规隐藏环境变量。 Python 进程继承此环境变量,Windows API 在调用 GetFullPathNameW 以将驱动器相对路径“D:”解析为完全限定路径时使用它。

在 CMD 中,我们可以通过设置“”列出所有环境变量,包括“隐藏”变量。这个命令依赖于一个错误,但是这个错误已经存在了很长时间,现在它是一个特性。要仅列出隐藏的,请使用 set ""| findstr/r "^=".例如:

C:\>set "" | findstr /r "^="
=C:=C:\

C:\>cd /d E:\UserData
E:\UserData>c:

C:\>set "" | findstr /r "^="
=C:=C:\
=E:=E:\UserData

C:\>set PYTHONPATH=E:
C:\>python -c "import sys; print(sys.path[1]); sys.exit(0xFF)"
E:\UserData

C:\>set "" | findstr /r "^="
=C:=C:\
=E:=E:\UserData
=ExitCode=000000FF

关于python - 在 Windows CMD 中更改卷时 sys.path 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com