Невозможно обнаружить последовательные порты с Python

115
13

Я пытаюсь найти правильный COM-порт, к которому подключено устройство, прежде чем сможет запустить остальную часть скрипта Python.

Я попытался использовать это:

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

И это:

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

И это:

    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

Все эти методы - это те, которые я нашел из других сообщений обмена в стеке; однако, с обеими функциями, когда я пытаюсь распечатать список com-портов, я получаю пустой список? Любая помощь/понимание будет с благодарностью заблаговременно!

спросил(а) 2016-07-16T00:34:00+03:00 4 года, 3 месяца назад
1
Решение
108

Как это:

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

Никогда не может открывать любой serial порт без определения скорости (часов).

В linux: run as root, обычный пользователь не может получить доступ /dev (не изменяйте разрешение cos name_space, создавая динамически. Плохая идея!).

ответил(а) 2016-07-19T10:22:00+03:00 4 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема