Възможно ли е да се направят множество екземпляри на 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: can only concatenate list (not „int“) to list“

Трябва да ги поддържам локални за циклите, защото отварям множество портове от зададен списък с използвани портове (събрани от друг файл). Трябва да използвам множество цикли, защото трябва да използвам time.sleep(), преди ser.read() да върне нещо. Има ли някакъв начин да го направя по този начин, или се връща към чертожната дъска?


person RageCage    schedule 03.10.2013    source източник
comment
OpenPorts е списък от списъци... Правилно ли е? Може би това, което наистина искате, е да направите OpenPorts.extend(j) вместо OpenPorts.append(j)? serial.Serial не работи със списък като първи аргумент AFAIK.   -  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