根据此页面,不同的操作系统可以从os.stat函数返回不同的信息。
http://docs.python.org/2/library/os.html
我有兴趣获得类型和创建者。
import os
from stat import *
print(os.stat('filename').st_ino)
print(os.stat('filename').st_creator)
此代码适用于inode(st_ino),但为创建者提供了错误:
AttributeError:'posix.stat_result'对象没有属性'st_creator'
与st_type和st_rsize相同。
我必须做一些特别的工作才能使这些工作起作用吗?
(这是Mac OS X 10.5和10.8与Python 2.我是Python的新手。)
答案 0 :(得分:3)
正如另一个答案所提到的,文档中的Mac OS意味着预OS X.在经典的Mac OS中,stat
被模拟,而Python stat
实际上意味着OS X上的stat
。
因此,您没有获得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类型,每用户和每文档应用程序绑定所取代。
答案 1 :(得分:1)
" Mac OS"在这里的文档中意味着Mac OS Classic,即在X之前。对于OSX,unix和FreeBSD注释是相关的。
答案 2 :(得分:0)
您可以查看
print(dir(os.stat('filename')))
查看系统中可用的属性。
不幸的是,Mac OS X 不会返回文件所有者的用户名,因此您需要pwd
之类的内容来将用户ID“翻译”为用户名。
import os
import pwd
uid = os.stat('filename').st_uid
owner = pwd.getpwuid(uid)
print(owner)
print(owner.pw_name)