Liste "verfügbarer" Com-Ports ermitteln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo zusammen, ich suche mir gerade nen Wolf im Inet und komme nicht weiter.

Weiß zufällig jemand von euch wie man mit unter Windows herausfinden kann welche Seriellen Schnittstellen es gibt und ob diese verfügbar sind?
Habe schon die pywin32 API durchforstet aber nichts gefunden.

Einfach nur von Com0-Com<x> durchtesten geht zwar, kommt aber nicht so gut.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Mit PyWin32 wird eine "IDE" mitinstalliert, PythonWin. Dort gibt es unter Tools einen "Com Browser". Besonders toll ist'r nicht, aber er funktioniert.

Edit: Wie kann man einen Menschen nur so extrem falsch verstehen ._. Tut mir leid.
Zuletzt geändert von BlackVivi am Donnerstag 15. November 2007, 22:48, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Zap!

Vielleicht ist da etwas für dich mit dabei:
http://www.microsoft.com/technet/script ... x?mfr=true

mfg
Gerold
:-)

EDIT: Sorry ich wollte eigentlich einen genaueren Link schicken, aber diese scheiß Frames...

http://www.microsoft.com/technet/script ... x?mfr=true
Zuletzt geändert von gerold am Donnerstag 15. November 2007, 19:49, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Krass, dachte das geht ein bisschen abstrakter, aber da scheint alles drin zu sein was ich brauche. Besten dank :)

Edit: Jetzt muss ich nur noch rausfinden welcher Wert mir mit Sicherheit sagen kann ob der Port verfügbar ist oder nicht. Hab StatusInfo im Blick, weiß aber noch nicht wofür die Zahlen stehen. Ist der Port frei bekomme ich eine 3 als Status, ist er belegt None. (so meine ersten Tests)
Wenn's einer genau weiß würd ich mich über Infos freuen.

Der Code von dem ich spreche: http://www.microsoft.com/technet/script ... x?mfr=true
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

du könntest auch pyserial einsetzen:

Code: Alles auswählen

import serial
i=0
while True:
    try:
            print serial.Serial(i)
            i += 1
    except: break

Code: Alles auswählen

Serial<id=0xb50490, open=True>(port='COM1', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
Serial<id=0xb50490, open=True>(port='COM2', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Zap hat geschrieben:Einfach nur von Com0-Com<x> durchtesten geht zwar, kommt aber nicht so gut.
Hi Jona, pySerial benutze ich bereits für die eigentlich Kommunikation aber ich will eben nicht alle Ports pollen.

Außerdem gibt es durchaus Fälle (wie ich sie heute kennen gelernt habe) wo es COM1 COM2 COM4 gibt.
Da nützt diese Abfrage nicht viel. Ausserdem würde ich bei deiner Lösung auch keinen COM2 finden wenn COM1 bereits belegt ist.
Werde mir morgen mal die win32com.client Lösung angucken. Das sieht recht Vielversprechend aus.
Würde mich gesagt über nähere Details freuen wenn jemand welche hat ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Zap hat geschrieben:Würde mich gesagt über nähere Details freuen wenn jemand welche hat ;)
Hallo Zap!

Meine COMM-Ports werden in der Registry unter "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM" aufgelistet.

Wenn das bei dir auch so ist, dann könntest du diese einfach aus der Registry auslesen.

Code: Alles auswählen

import _winreg as winreg
key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, r"HARDWARE\DEVICEMAP\SERIALCOMM")
data = []
i = 0
while True:
    try:
        data.append(winreg.EnumValue(key, i)[1])
        i += 1
    except WindowsError:
        break
winreg.CloseKey(key)
print data

Code: Alles auswählen

[u'COM1', u'COM2', u'COM3', u'COM4', u'COM6', u'COM7',
u'COM15', u'COM16', u'COM17', u'COM18', u'COM19', u'COM20', 
u'COM21', u'COM22', u'COM40']
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten