2016-07-15 5 views
0

Ich versuche den richtigen COM-Port zu finden, mit dem ein Gerät verbunden ist, bevor ich den Rest des Python-Skripts ausführen kann.Kann keine seriellen Anschlüsse mit Python erkennen

Ich habe mit dieser versucht:

import serial.tools.list_ports 
    ports = list(serial.tools.list_ports.comports()) 
    for p in ports: 
     print p 

Und:

import wmi 
    c = wmi.WMI() 
    wql = "Select * From Win32_SerialPort" 
    for item in c.query(wql): 
     print item 

Und:

def serial_ports(): 

    if sys.platform.startswith('win'): 
     ports = ['COM%s' % (i + 1) for i in range(256)] 
     print ports 
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): 
     # this excludes your current terminal "/dev/tty" 
     ports = glob.glob('/dev/tty[A-Za-z]*') 
    elif sys.platform.startswith('darwin'): 
     ports = glob.glob('/dev/tty.*') 
    else: 
     raise EnvironmentError('Unsupported platform') 

    result = [] 
    for port in ports: 
     try: 
      s = serial.Serial(port) 
      s.close() 
      result.append(port) 
     except (OSError, serial.SerialException): 
      pass 
    return result 

Alle diese Methoden sind diejenigen, die ich von anderen Stapel gefunden haben Austausch von Posten; jedoch, mit beiden Funktionen, wenn ich versuche, die Liste der COM-Ports zu drucken, bekomme ich eine leere Liste? Jede Hilfe/Einblicke würde sehr dankbar sein, danke im Voraus!

+0

haben Sie tatsächlich irgendwelche COM-Ports? neuere PCs haben überhaupt keine, da das ist Vorgeschichte Legacy-Hardware, und neue Maschinen gehen Legacy-frei –

+0

Ja! Sorry, ich habe das in meinem vorherigen Beitrag nicht klargestellt, aber wenn ich die COM-Port-Nummer in manuellem/hartem Code eintrage, funktioniert es einwandfrei. Ich versuche, den Prozess der Suche nach dem richtigen COM-Port, mit dem mein Gerät verbunden ist, zu automatisieren, indem ich zuerst eine Liste aller COM-Ports erhalte und sie alle ausprobiere. – Jennifer

+0

Haben Sie die Lösung gefunden? oder hast du noch ein Problem? –

Antwort

0

So:

import serial,os,sys,glob 


def serial_ports(): 

    if sys.platform.startswith('win'): 
     ports = ['COM%s' % (i + 1) for i in range(256)] 
     print ports 
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): 
     # this excludes your current terminal "/dev/tty" 
     ports = glob.glob('/dev/tty[A-Za-z]*') 
    elif sys.platform.startswith('darwin'): 
     ports = glob.glob('/dev/tty.*') 
    else: 
     raise EnvironmentError('Unsupported platform') 

    result = [] 
    print ports 
    for port in ports: 
     try: 
      s = serial.Serial(port,9600) 
      s.close() 
      result.append(port) 
     except (OSError, serial.SerialException): 
      pass 
    return result 

print serial_ports() 

kann niemals öffnen jede serial Port ohne Geschwindigkeit (Uhr) Definition.

Unter Linux: run as root, normaler Benutzer kann nicht auf /dev zugreifen (Ändern Sie nicht die Berechtigung cos name_space erstellt dynamisch. Schlechte Idee!).