【问题标题】:PySerial FileNotFoundErrorPySerial FileNotFoundError
【发布时间】:2014-11-18 21:45:57
【问题描述】:

我正在尝试使用 PySerial 来接受来自 RFID 阅读器的输入。根据here: 的答案,我尝试使用 WinObj 并发现一些奇怪的东西:GLOBAL??? 文件夹中没有 COM3 端口指向“更多驱动程序特定”的东西。但是,当我运行命令python -m serial.tools.list_ports 时,它会抛出COM3。当我尝试一个简单的程序时:

import serial
ser = serial.Serial()
ser.port = 2
print(ser)
ser.open()

我得到以下输出:

Serial<id=0x45e8198, open=False>(port='COM3', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
serial.serialutil.SerialException: could not open port 'COM3': FileNotFoundError(2, 'The system cannot find the file specified.', None, 2)

所以,我知道 PySerial 正在正确的位置寻找我的阅读器,并且根据两个不同的来源(设备管理器和命令行),设备正在注册。然而我仍然收到这个错误。到底是怎么回事?我在 Windows 8.1 上使用 Python 3.3。

编辑:这个错误实际上是我从 python 的命令行得到的。我从制作和运行上述程序中得到的结果是:

AttributeError: 'function' object has no attribute 'Serial.'

对此我也很感激。

【问题讨论】:

    标签: python


    【解决方案1】:

    我要检查的第一件事是您连接的 com 端口以及当前正在使用的端口:

    import serial.tools.list_ports
    import sys
    
    list = serial.tools.list_ports.comports()
    connected = []
    for element in list:
        connected.append(element.device)
    print("Connected COM ports: " + str(connected))
    # compliments of https://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python#14224477
    """ Lists serial port names
    
        :raises EnvironmentError:
            On unsupported or unknown platforms
        :returns:
            A list of the serial ports available on the system
    """
    if sys.platform.startswith('win'):
    # !attention assumes pyserial 3.x
        ports = ['COM%s' % (i + 1) for i in range(256)]
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
        # this excludes your current terminal "/dev/tty"
        ports = glob.glob('/dev/tty[A-Za-z]*')
    elif sys.platform.startswith('darwin'):
        ports = glob.glob('/dev/tty.*')
    else:
        raise EnvironmentError('Unsupported platform')
    
    result = []
    for port in ports:
        try:
            s = serial.Serial(port)
            s.close()
            result.append(port)
        except (OSError, serial.SerialException):
            pass
    print("Availible COM Ports: " + str(result))
    

    然后,确保您使用所需的参数调用串行端口构造函数:

    ser = serial.Serial(
        port="com2", # assumes pyserial 3.x, for 2.x use integer values
        baudrate=19200,
        bytesize=8,
        parity="E",  # options are: {N,E,O,S,M}
        stopbits=1,
        timeout=0.05)
    

    当你在没有任何参数的情况下调用“serial.Serial()”然后添加端口ID时,我并不完全确定它会做什么,我总是明确引用我想在那里使用的端口。

    【讨论】:

      【解决方案2】:

      您的问题在于串行对象正在寻找字符串“COMXX”,否则它将无法工作。我不知道它是否需要大写。

      确保你像这样配置它。

      serial.Serial(port = "COM2")
      

      【讨论】:

        猜你喜欢
        • 2019-05-08
        • 2020-11-16
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多