关于macos:在调用Python的os.getcwd()时如何获得正确的大小写?

How can I get the correct case when calling Python's os.getcwd()?

当我从我的主目录在OS X 10.6.4下的Mac上调用os.getcwd()时,路径将转换为小写。我明白了

/用户/名为myUsername

代替

/用户/用户名为myusername

在另一台Mac上,我得到了正确的大写字符串。我该如何配置?是否有(隐藏的)Python设置?

询问理由:
在OS X上,所有用户目录都在"/ Users"中。这总是大写的。当使用Mercurial时,它有时会与我当前目录的这种奇怪和错误的规范化混淆。

在回复建议的解决方案时:

(1)
DiskUtil说我的驱动器格式为"Mac OS Extended(Journaled)"。我在几个月前买了我的电脑,它仍然是最初的驱动器,从未重新格式化。

(2)另一个python控制台会话日志:

$ >>> os.system('pwd')

/用户/克拉斯

0

$ >>> os.getcwd()"

"/用户/克拉斯"

$ >>> os.path.normcase('/ Users / klaas')

"/用户/克拉斯"

$ >>> os.chdir('/ UsErS / klaas')

$ >>> os.getcwd()

"/用户/克拉斯"

$ >>> os.chdir('/ UsErS / klaas')

$ >>> os.getcwd()

"/用户/克拉斯"

更新2:

感谢所有的答复。我在Objective-C中创建了一个测试用例,它具有相同的小写文件夹名称:

1
2
3
4
5
6
7
8
NSFileManager *filemgr;
NSString *currentpath;

filemgr = [NSFileManager defaultManager];

currentpath = [filemgr currentDirectoryPath];

NSLog (@"Current directory is %@", currentpath);


"HFS plus"文件系统,自Mac OS 8时代以来一直是Apple的文件系统,通常不区分大小写。

Mac OS X版本10.4,或称为"Tiger",因为它更为人所知,它引入了创建区分大小写的HFS plus文件系统的能力。

他们中的一个可能会使用区分大小写的FS吗?


最后,这是Mercurial安装的一个问题。我今晚再次遇到它。

https://www.mercurial-scm.org/wiki/Download为您提供了如何安装Mercurial的不同选项。如果我选择第一个(Mac OS X软件包),"/ Users"目录将报告为"/ users"(即使使用Objective C访问它)。这可以通过macports选项安装Mercurial来解决。这解决了问题,并再次使用大写的"U"返回"/ Users"目录。

任何提示,为什么会发生这种情况仍然是受欢迎的。

但至少有一个解决方案。


两个没有受过教育的猜测:

首先,显然OSX通常不区分大小写,这通常意味着保留大小写:当前目录的名称来自它在磁盘上的大小写,或者当你更改它时它是如何大写的。如果你运行os.system('pwd'),它是否显示小写?如果是这样,那就是操作系统报告的内容,而Python没有做错任何事情。如果你先os.chdir('/UsErS/username')它会改变吗?

其次,有一个函数可以根据操作系统小写或不选择:os.path.normcasemacpath版本小写。我很确定os.getcwd不会自动运行结果;只是提到它作为一个检查的地方。


问题似乎是您在特定Mac上安装特定Python的问题。我无法找到有同样问题的其他人。

您的Mac很可能在安装Python时遇到问题。 AFAIK,没有配置选项让Python用正确的大小写表示getcwd()(默认情况下应启用此行为)。如果它是一个选项,我会尝试重新安装Python。如果这不起作用,您应该向Python bug跟踪器报告错误。