【问题标题】:Is it possible to make multiple instances of serial.Serial() in pyserial?是否可以在 pyserial 中创建多个 serial.Serial() 实例?
【发布时间】:2013-10-25 04:53:54
【问题描述】:

我正在尝试创建的函数查找负责 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'

我需要将它们保留在循环的本地,因为我正在从一组正在使用的端口列表中打开多个端口(从另一个文件收集)。我必须使用多个循环,因为我需要在 ser.read() 返回任何内容之前使用 time.sleep()。有没有办法以这种方式进行,还是回到绘图板上?

【问题讨论】:

  • OpenPorts 是一个列表的列表...对吗?也许你真正想做的是 OpenPorts.extend(j) 而不是 OpenPorts.append(j) ? serial.Serial 不适用于列表作为第一个参数 AFAIK。
  • 啊,我的问题。出于另一个原因,我需要它成为列表列表,但我知道如何修复它。如果您将其发布为答案,我会接受。谢谢。

标签: python serial-port pyserial


【解决方案1】:

而不是存储端口:

j.append(port)

为什么不附加 ser 实例,以便以后可以像这样使用:

j.append(ser)

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

以后你可以用 :

关闭它们
for ser in OpenPorts:
       ser.close()

【讨论】:

  • 在这一点上,我在项目中走得更远,这就是我解决问题的方法。所以我会接受它,因为它是正确的解决方案。
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2013-07-11
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
相关资源
最近更新 更多