正如另一个答案所提到的,文档中的 Mac OS 是指 OS X 之前的版本。在经典的 Mac OS 中,stat
是模拟的,而 Pythonstat
实际上是指stat
OS X 上的。
因此,您不会通过 os.stat 获得类型和创建者。相应的低级调用是getattrlist
,但这不是由 Python 包装的(您也不应该真正使用它)。stat
您可以通过打印它确切地看到返回的内容:
>>> import os
>>> s = os.stat('foo')
>>> s
posix.stat_result(st_mode=33152, st_ino=18294505, st_dev=16777218L, st_nlink=1,
st_uid=501, st_gid=501, st_size=0, st_atime=1379052292, st_mtime=1379052292,
st_ctime=1379052308)
让我们设置一个类型和创建者foo
来测试:
% SetFile -t 'TYPE' -c 'CREA' foo
Python 2.x 中的简单答案是MacOS.GetCreatorAndType
. 但是,它在 3.x 中消失了,并且它使用的底层机制已被弃用。如果您的目标只是为自己完成某件事,那么请务必使用它。
>>> import MacOS
>>> MacOS.GetCreatorAndType('foo')
('CREA', 'TYPE')
一种更面向未来的机制是使用 PyObjC,它适用于 Python 3.x,并且不使用已弃用的 OS X API:
>>> from Foundation import NSFileManager, NSFileHFSCreatorCode, NSFileHFSTypeCode
>>> attributes = NSFileManager.defaultManager().attributesOfItemAtPath_error_('foo', None)[0]
>>> attributes[NSFileHFSTypeCode]
1415139397L
>>> attributes[NSFileHFSCreatorCode]
1129465153L
这些以整数形式出现,因为 PyObjC 没有四字符代码的映射(也没有适当的元数据来理解它得到了什么)。这是一个检索四字符字符串的快速映射函数:
>>> def decode(f): return ''.join(chr(f >> i * 8 & 0xff) for i in xrange(3,-1,-1))
...
>>> decode(attributes[NSFileHFSCreatorCode])
'CREA'
>>> decode(attributes[NSFileHFSTypeCode])
'TYPE'
(如果您使用的是 Python 3,请替换xrange
为上述内容。)range
请注意,一般来说,类型/创建者在 OS X 中的使用并不多。它们的功能已被文件扩展名、UTI、MIME 类型、每用户和每文档应用程序绑定所取代。