2009-10-13 4 views
0

별도의 프로세스가 완료되면 파일 소유자에게 전자 메일을 보내기위한 스크립트를 작성하고 있습니다. 나는 시도했다 :Python의 Windows 파일 메타 데이터보기

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

이것의 출력은 소유자 ID 번호이다. 필요한 것은 Windows 사용자 이름입니다.

+0

에서 ganked? – Mark

답변

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() 

무자비 내가 FileInfo.st_uid 항상 창에서 0을 반환 생각 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