2009-10-13 49 views
0

我正在编写一个脚本来在单独的进程完成时向文件的所有者发送电子邮件。我曾尝试过:在Python中查看Windows文件元数据

import os 
FileInfo = os.stat("test.txt") 
print (FileInfo.st_uid) 

此输出是所有者ID号。我需要的是Windows用户名。

+0

我想FileInfo.st_uid总是在Windows下返回0狠狠地ganked? – Mark 2009-10-13 17:55:22

回答

3

一旦我停止搜索文件元数据并开始寻找文件安全性,我发现了我正在寻找的东西。

import tempfile 
import win32api 
import win32con 
import win32security 

f = tempfile.NamedTemporaryFile() 
FILENAME = f.name 
try: 
    sd = win32security.GetFileSecurity (FILENAME,win32security.OWNER_SECURITY_INFORMATION) 
    owner_sid = sd.GetSecurityDescriptorOwner() 
    name, domain, type = win32security.LookupAccountSid (None, owner_sid) 

    print "I am", win32api.GetUserNameEx (win32con.NameSamCompatible) 
    print "File owned by %s\\%s" % (domain, name) 
finally: 
    f.close() 

http://timgolden.me.uk/python-on-windows/programming-areas/security/ownership.html

2

我认为你唯一的机会就是使用pywin32 extensions并自问窗口。

基本上你look on msdn how to do it in c++并使用相应的pywin32函数。

from win32security import GetSecurityInfo, LookupAccountSid 
from win32security import OWNER_SECURITY_INFORMATION, SE_FILE_OBJECT 

from win32file import CreateFile 
from win32file import GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL 

fh = CreateFile(__file__, GENERIC_READ, FILE_SHARE_READ, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None) 
info = GetSecurityInfo(fh, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION) 

name, domain, type_id = LookupAccountSid(None, info.GetSecurityDescriptorOwner()) 
print name, domain, type_id