Dies ist eine alte Version des Dokuments!
Windows
COM-Wrapper-Klassen erstellen
Um in Python auf COM-Schnittstellen zugreifen zu können, wird das Modul win32com benötigt. Um die benötigten COM-Wrapper-Klassen zu erstellen muss folgendes Skript ausgeführt werden.
import sys from win32com.client import makepy sys.argv = ["makepy", "<PATH_TO_TLB>"] makepy.main()
Nutzung von IPv4 erzwingen
Unter neueren Windows-Versionen wird unter Python bei der Namensauflösung für Windows-Rechner (z.B. auch localhost) zuerst eine IPv6-Adresse zurückgegeben. Wenn der anzusprechende Server aber kein IPv6 spricht, kommt es aufgrund der entsprechenden Timeouts zu Verzögerungen beim Verbindungsaufbau.
Eine Lösung wäre es natürlich, IPv6 im Betriebssystem zu deaktivieren. Das hat aber was von „mit Kanonen auf Spatzen schießen“. Man kann Python auch dazu überreden, bei der Namensauflösung nur IPv4-Adressen zu berücksichtigen.
import socket origGetAddrInfo = socket.getaddrinfo def getAddrInfoWrapper(host, port, family = 0, socktype = 0, proto = 0, flags = 0): return origGetAddrInfo(host, port, socket.AF_INET, socktype, proto, flags) socket.getaddrinfo = getAddrInfoWrapper
Windows-Service
Pfad zum Skript
Wenn man ein Python-Skript als Windows-Service laufen lässt, kommt man mit sys.argv[0]
nicht an den Pfad des Skripts heran. Statt dessen wird der Pfad zu pythonservice.exe zurückgegeben.
Es gibt trotzdem einen Möglichkeit, an den Skript-Pfad zu kommen:
import inspect path = inspect.currentframe().f_code.co_filename
Schnipsel
Modalen Dialog anzeigen:
import os, sys, ctypes ctypes.windll.user32.MessageBoxA(0, "curdir: %s\nexedir: %s\nsys.winver: %s" % ( os.path.abspath(os.curdir), os.path.abspath(os.path.dirname(sys.argv[0])), sys.winver, ), "%s - Message" % os.path.basename(sys.executable), 0x30 )