2013-10-03 2 views
0

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

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 

Я получаю «Ошибка типа: может сцепить только список (не„ИНТ“) в список»

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

+0

OpenPorts - это список списков ... Правильно ли? Возможно, вы действительно хотите сделать «OpenPorts.extend (j)» вместо «OpenPorts.append (j)»? serial.Serial не работает со списком в качестве первого аргумента AFAIK. – mguijarr

+0

У меня проблемы. Мне нужно, чтобы это список списков по другой причине, но я знаю, как я могу это исправить. Если вы опубликуете это в качестве ответа, я приму это. Спасибо. – RageCage

ответ

0

вместо того, чтобы хранить порт:

j.append(port) 

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

j.append(ser)

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

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

for ser in OpenPorts: 
     ser.close() 
+0

На данный момент я намного дальше продвигаюсь по проекту, и именно так я решил проблему. Поэтому я приму это, потому что это правильное решение. – RageCage

Смежные вопросы