Можно ли создать несколько экземпляров serial.Serial() в pyserial?

Функция, которую я пытаюсь создать, находит порт модема, отвечающий за AT-команды. Я пытаюсь сделать разные экземпляры serial.Serial() локальными для разных циклов. Я искал информацию в документации, которую смог найти, но ни один из тех, что я нашел, никоим образом не упомянул об этом (если это где-то есть, и я пропустил это, пожалуйста, не стесняйтесь выставлять меня глупым и ссылаться на это). Например:

    OpenPorts = []
    j=[]
    for modem in PortList:          #This opens every Modem
            for port in modem:
                    try:
                            j=[]
                            print port
                            ser = serial.Serial(port, 9600, timeout=1)
                            ser.close()
                            ser.open()
                            j.append(port)
                    except serial.SerialException:
                            continue
            OpenPorts.append(j) 
            print OpenPorts
    del j
    del ser

Это работает. Но когда я пытаюсь это:

 for port in OpenPorts:
            if port is not '':
                    ser = serial.Serial(port, 9600, timeout=1) 
                    ser.write('ati')
 del ser

Я получаю «TypeError: можно только объединить список (не «int») в список»

Мне нужно, чтобы они были локальными для циклов, потому что я открываю несколько портов из установленного списка используемых портов (собранного из другого файла). Я должен использовать несколько циклов, потому что мне нужно использовать time.sleep(), прежде чем ser.read() что-нибудь вернет. Есть ли способ сделать это таким образом, или это вернуться к чертежной доске?


person RageCage    schedule 03.10.2013    source источник
comment
OpenPorts — это список списков… Верно? Может быть, вы действительно хотите сделать OpenPorts.extend(j) вместо OpenPorts.append(j)? serial.Serial не работает со списком в качестве первого аргумента, насколько я знаю.   -  person mguijarr    schedule 04.10.2013
comment
Ах, вот моя проблема. Мне нужно, чтобы это был список списков по другой причине, но я знаю, как это исправить. Если вы опубликуете это как ответ, я приму это. Спасибо.   -  person RageCage    schedule 04.10.2013


Ответы (1)


вместо сохранения порта:

j.append(port)

Почему бы вам не добавить экземпляр ser, чтобы позже вы могли использовать его следующим образом:

j.append(ser)

for ser in OpenPorts:
       ser.write('ati')

и чем позже вы можете закрыть их все с помощью:

for ser in OpenPorts:
       ser.close()
person jramirez    schedule 24.10.2013
comment
На данный момент я намного продвинулся в проекте, и именно так я решил проблему. Так что я приму это, так как это правильное решение. - person RageCage; 29.10.2013