python - 描述此 python windows os.chdir 行为的文档?

标签 python chdir

我今天了解到,在 Windows 上的 python 中,做 os.chdir('f:\\')与做 os.chdir('f:') 非常不同.带有尾部反斜杠的命令实际上更改了当前目录。没有反斜杠,命令就像输入 f:在命令提示符下,将当前目录更改为 f 上的最后一个当前目录开车。

这是一个例子:

import time
import os
if __name__ == '__main__':
    os.chdir('f:\\directory')
    print 'cwd is {}'.format(os.getcwd())
    os.chdir('d:\\directory')
    print 'cwd is {}'.format(os.getcwd())
    os.chdir('f:')
    print 'cwd is {}'.format(os.getcwd())
    os.chdir('f:\\')
    print 'cwd is {}'.format(os.getcwd())

打印

cwd is f:\directory
cwd is d:\directory
cwd is f:\directory
cwd is f:\

我能理解为什么这种差异是有用的,但找不到任何记录这种行为的东西。我习惯于在我的目录中留下尾部斜线,因为我通常在这里使用字符串...

是否在任何地方记录了这种行为?我能相信它不会改变吗?

最佳答案

这不是 Python 的特性,它是一般的 Windows 特性。

在 Windows 上,每个驱动器都会跟踪其自己的当前工作目录。所以实际上,“当前工作目录”是当前驱动器的当前工作目录。

  • chdir('F:') 将驱动器更改为 F,但不更改 F 的工作目录,因此您最终更改为当前F 驱动器的目录。

  • chdir('F:\\') 将驱动器更改为 F,并将 F 的工作目录更改为它的根目录,所以你最终会切换到 F 驱动器的根目录。

它也不特定于 chdir。任何处理路径名的函数,甚至 open,都会以这种方式运行。

*open('F:spam.txt') 打开 F 驱动器当前工作目录中的文件 spam.txt(即使您当前的驱动器是, C)。 (这与 DOS 风格工具的工作方式一致。)

*open('F:\\spam.txt') 打开 F 盘根目录下的文件 spam.txt


一些跨平台工具试图假装驱动器是顶级挂载点,所以 cd F: 就像 cd/f/,并且 确实 转到F 的根目录。这样做的好处是使您的程序的 native Windows 和 Cygwin 构建非常相似,但缺点是使您的程序不像传统的 DOS 风格的程序那样工作。一般而言,更多工具以 Python 的方式做事——它为您提供了更大的灵 active ,并且通常不会造成混淆。


正如您在评论中添加的那样:

Apart from the "Can I rely on it not changing", I mean who can tell what Microsoft will break in their newly announced 'improved' console.

好吧,这种行为可以追溯到……我认为是 PC-DOS 2.0,或者当他们第一次添加目录时。如果他们要改进这一点,他们可能会通过摆脱驱动器和路径来实现更灵活或更像 POSIX 的东西。 (虽然 UNC 路径和 \\.\… “原始”路径可以说已经更灵活,更像 POSIX,并且当它们添加了 NT 中的那些……)

关于python - 描述此 python windows os.chdir 行为的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432825/

相关文章:

batch-file - 为什么 setlocal 会干扰 Windows 批处理文件中的 chdir?

python - 使用 Python,如何将多个文件从 FTP 服务器上的子目录下载到本地计算机上的所需目录?

python - Microsoft 身份验证 - 移植到 FastAPI 的 Python Flask msal 示例应用程序

c++ - 作为软件开发人员,可以轻松集成到您的软件中的 SNMP 套件是什么

python - 必须采用 'app_label.ModelName' 形式。"% model ValueError : Invalid model reference

python - na_rep参数代表什么?

compilation - chdir 未声明,编译错误 g++

python os.path.realpath 无法正常工作

perl - Perl 中的 chdir 使用两个字符串 : chdir "/home/$dir1/$dir2"

python - 导入环境 OpenAI Gym 时出错