Dnes se budu aspoň v krátkosti věnovat dlouhému tématu: pywin32
Kromě balnálních záležitostí, jako je zpřístupnění celého Win32 API umí pohodlně pracovat s ActiveX komponentama. Jmenují se pořád ještě ActiveX? Jeden čas to bylo OLE2, někdy taky COM. Takže si představte, že dostanete do ruky nějaký hardware, třeba tiskárnu štítků Brother, a máte ji integrovat do vašeho systému. Jediné, co máte k dispozici je jakýsi OLE objekt. Co teď? No přece: Použije win32com.client. Třeba pro tu mou tiskárnu to je takhle:
brsscom = win32com.client.Dispatch("BrssCom.Document") brsscom.Open(u"C:\\templates\\t1.bin") brsscom.DoPrint(0x40000000, u"0")Ovšem, různé COM objekty budou mít různé API. API k tomu svému najdete v dokumentaci, většinou i s nějakým příkladem ve Visual Basicu.
Jiný příklad ze života: Pokud potřebujete stahovat soubor z webu, který vyžaduje přihlášení, a zároveň jste za proxy, která taky vyžaduje přihlášení do domény, a máte „vstřícné“ IT, tak si se základními knihovnami Pythonu asi nevystačíte. Můžete ale použít WinHttp.WinHttpRequest.5.1:
o = win32com.client.Dispatch("WinHttp.WinHttpRequest.5.1") o.SetProxy(2, "myproxyproxy:8080", "") o.Open("GET", url, False) o.SetCredentials("domain\username", "password", 1) o.SetCredentials("remote_credentials", "remote_password", 0) o.Send() f = open("localfilename", "wb") f.write(o.ResponseBody) f.close()
Ve zdrojácích najdete i nějaké ukázky, např. plugin do Excelu jestli má někdo chuť.
Pokud neděláte nic vážného a nechcete hned rozjíždět SQLAlchemy s pyodbc, tak vězte, že součástí pywin32 je i odbc klient. Implementuje pouze Python Database API verzi 1, ale na něco menšího to stačí. Nevím, jestli je vůbec nějaký příklad potřeba.
import odbc db = odbc.odbc("DSNNAME") # DSNNAME je jméno nějaké definované DSN cursor = db.cursor() cursor.execute("""select firstname, surname from person""") i = cursor.fetchone() while i: print i i = cursor.fetchone() cursor.close() db.close()
Skriptování a Windows, to nejde dohromady. Tak třeba: Přihlásit se jako admin, spustit nějaký skript a zase se odhlásit? Když navíc chceme nějakou informaci o tom, jestli to vlastně proběhlo?
global userH userH = None def login() global userH userH = win32security.LogonUser(USERNAME, DOMAIN, PASSWORD, win32security.LOGON32_LOGON_INTERACTIVE, win32security.LOGON32_PROVIDER_DEFAULT) win32security.ImpersonateLoggedOnUser(userH) def logout(): global userH win32security.RevertToSelf() win32api.CloseHandle(userH)
win32service a win32serviceutil se dají použít k tomu, že si uděláte kolem vašeho programu obal, který umožní nainstalovat jej jako Windows Service (win32/lib/win32serviceutil.py:ServiceFramework). Nebo třeba ke spuštění Pyramid aplikace jako service.
Kdybych měl vyjmenovat, co všechno jsem ještě použil, tak namátkou:
Dnes to bylo spíš o Windows než o Pythonu. Snad se to ale bude někomu hodit.
Jmenuju se Petr Blahoš. Programuju něco přes 20 let. Tady se snažím psát hlavně o Pythonu, webovém frameworku Pyramid, a občas i o něčem úplně jiném.
Přečteno 19 025×
Přečteno 11 763×
Přečteno 9 139×
Přečteno 8 651×
Přečteno 8 451×