我正在編寫一個腳本來在單獨的進程完成時向文件的所有者發送電子郵件。我曾嘗試過:在Python中查看Windows文件元數據
import os
FileInfo = os.stat("test.txt")
print (FileInfo.st_uid)
此輸出是所有者ID號。我需要的是Windows用戶名。
我正在編寫一個腳本來在單獨的進程完成時向文件的所有者發送電子郵件。我曾嘗試過:在Python中查看Windows文件元數據
import os
FileInfo = os.stat("test.txt")
print (FileInfo.st_uid)
此輸出是所有者ID號。我需要的是Windows用戶名。
一旦我停止搜索文件元數據並開始尋找文件安全性,我發現了我正在尋找的東西。
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
我認爲你唯一的機會就是使用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
我想FileInfo.st_uid總是在Windows下返回0狠狠地ganked? – Mark 2009-10-13 17:55:22