我正在编写一个脚本,在单独的进程完成后通过电子邮件发送文件的所有者。我试过了:
import os
FileInfo = os.stat("test.txt")
print (FileInfo.st_uid)
此输出是所有者ID号。我需要的是Windows用户名。
答案 0 :(得分: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
中掏出来答案 1 :(得分: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