【问题标题】:Python: File Can't be Found (pySerial)Python:找不到文件(pySerial)
【发布时间】: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


【解决方案1】:

经过进一步研究,我意识到当 RS232 USB 插入 PC 时,我们需要给它一点时间来打开流。听起来它是在为其创建临时文件时打开的。 虽然它识别出 COM 端口几乎立即可用,但在我尝试创建 Serial 实例时它还没有准备好,这就是我收到 FileNotFound 错误的原因。

一个简单的半秒休眠功能就解决了这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2019-05-08
    • 2020-09-22
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多