【发布时间】:2019-06-22 08:40:03
【问题描述】:
通过 pySerial 打开串行/控制台端口时遇到一个小问题。 我的程序旨在获取活动的 com 端口,打开控制台连接,然后发送数据。当程序运行并插入我的 RS232 USB 时,我收到一个 SerialException 错误。 (更具体地说,“无法打开端口:FileNotFoundError”)
在程序运行的情况下,它会一直打印“No RS232 Connected”,但是当 RS232 USB 连接时,程序会中断并运行到 SerialException 错误。
如果我在运行程序之前插入 RS232 USB 然后运行它,它可以正常读取并执行正常操作。
ports = serial.tools.list_ports.comports(include_links=False)
if not ports:
print("No RS232 Connected")
if ports:
for port in ports:
print('Found port ' + port.device)
ser = serial.Serial(port.device)
if ser.isOpen():
ser.close()
break
console = serial.Serial(port.device, baudrate=9600, parity="N", stopbits=1, bytesize=8, timeout=0.4)
我对 Python 和一般编程很陌生,但我觉得问题可能出在“端口”列表周围,由于 while True 循环,该列表已经被填充了两次。然后,当我们通过打开端口来创建控制台时,我们期望列表中有一个条目,但实际上有两个。 由于我们不能在同一个 COM 端口上打开 2 个控制台连接,因此我们会收到错误消息。
如果我打印“端口”列表,我会得到这个。
“[<serial.tools.list_ports_common.ListPortInfo object at 0x000002B5D77F0D68>]
[<serial.tools.list_ports_common.ListPortInfo object at 0x000002B5D77F0D68>]”
任何帮助将不胜感激!如果您需要更多详细信息,请告诉我。 谢谢,
【问题讨论】:
-
您的代码丢失了一半。无论如何,使用集合而不是列表(如果您的对象是可散列的)应该删除重复项。或者只是在添加之前测试列表中的成员资格。
-
另外你说的打印出来的不能是单个python列表。出了点问题。
-
感谢 Andras 的帮助,我已经设法解决了这个问题。这与 Windows 设置串行端口的方式有关,而不是我尝试获取 COM 端口号的方式。
标签: python while-loop pyserial