2010-11-01 23 views
0

当我从我的主目录在OS X 10.6.4下的Mac上调用os.getcwd()时,路径将转换为小写。我得到如何在调用Python的os.getcwd()时获得正确的大小写?

/用户/名为myUsername

代替

/用户/用户名为myusername

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

询问原因: 在OS X上,所有用户目录都在“/ Users”中。这总是大写。当使用Mercurial时,它有时会与我当前目录的这种奇怪和不正确的标准化混淆。

在答复建议的解决方案:

(1) 磁盘工具说,我的车有 “Mac OS扩展(日志式)” 的格式。我在一个月前买了我的电脑,它仍然是原来的驱动器,从来没有重新格式化过。

(2)另一种蟒控制台会话日志:

$ >>>使用os.system( 'PWD')

/用户/克拉斯

$ >>> os.getcwd()”

'/用户/克拉斯'

$ >>> os.path.normcase( '/用户/克拉斯' )

'/用户/克拉斯'

$ >>> os.chdir( '/用户/克拉斯')

$ >>> os.getcwd()

“/用户/克拉斯

$ >>> os.chdir( '/用户/克拉斯')

$ >>> os.getcwd()

'/用户/克拉斯'

更新2:

感谢所有的答复。我创建了Objective-C的测试,并且它具有相同的小写的文件夹名称:

NSFileManager *filemgr; 
NSString *currentpath; 

filemgr = [NSFileManager defaultManager]; 

currentpath = [filemgr currentDirectoryPath]; 

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

你安装了另一个python(通过'macports'或'fink')吗?当你从控制台启动时,Python会报告什么版本?我的系统'Python 2.6.1(r261:67515,2010年2月11日,00:51:29) - [GCC 4.2.1(Apple Inc. build 5646)] darwin' works fine ... – ChristopheD 2010-11-01 22:08:57

+0

主机是否相同操作系统版本和使用相同的文件系统? – 2010-11-01 22:19:04

+0

尝试使用“dtruss”与os.getcwd一起运行脚本。至少你可以看到OS返回的目录。 – 2010-11-01 23:23:36

回答

0

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

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

任何暗示为什么发生这种情况仍然受欢迎。

但至少有一个解决方案。

0

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

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

+1

Python bug导致它以某种方式小写'getcwd'的返回值?这似乎不太可能 - 除非你真的有这方面的证据,建议重新安装Python似乎扔掷飞镖只会浪费他的时间。 – 2010-11-01 22:20:26

+0

@GlennMaynard似乎他的Python安装有问题,因为他无法在另一台机器上重现问题。它可能是文件系统,但我遇到过类似的Python特性,通过重新安装解决。 – 2010-11-01 22:34:59

+0

即使在奇怪的情况下,他应该弄清楚什么是错误的,这样他就可以报告错误,而不是推翻问题,并让下一个人感到神秘。但是,Module/posixmodule.c中没有任何内容修改'getcwd'的结果。 – 2010-11-01 22:58:27

0

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

首先,显然OSX通常是不区分大小写的,这通常意味着保留大小写:当前目录或者的名字来源于它是如何在磁盘上的资本,或者它如何被资本时你改变了它。如果您运行os.system('pwd'),是否显示它是小写或不是?如果是这样,那么这就是操作系统正在报告的内容,而Python没有做任何错误。如果你第一次使用os.chdir('/UsErS/username'),它会改变吗?

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

+0

(“通常”,因为显然HFS +可以设置为区分大小写;我认为它通常是。http://bugs.python.org/issue3485。此外,我不知道“macpath”是否适用于OSX或者如果它滞留MacOS cruft;如果它是后者那么这部分可能是不相关的。) – 2010-11-01 22:31:04

+0

是的,“macpath”用于MacOS;忽略这一点。 – 2010-11-01 22:56:51

+0

DiskUtil表示我的驱动器的格式为“Mac OS Extended(Journaled)”。我在一个月前买了我的电脑,它仍然是原来的驱动器,从来没有重新格式化过。 – Klaas 2010-11-02 09:31:21

2

自Mac OS 8以来一直是Apple选择的文件系统的“HFS plus”文件系统通常不区分大小写。

Mac OS X版本10.4或更早为人熟知的“Tiger”引入了创建区分大小写的HFS +文件系统的功能。

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

相关问题