python - PySerial FileNotFoundError

标签 python

我正在尝试使用 PySerial 来接受来自 RFID 阅读器的输入。根据 here: 的答案,我尝试使用 WinObj 并发现一些奇怪的东西:COM3 文件夹中没有 GLOBAL??? 端口指向“更特定于驱动程序”的内容。但是,当我运行命令 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.'

我也很欣赏这方面的想法。

最佳答案

我要检查的第一件事是您所连接的 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 时,我不完全确定它会做什么,我总是明确引用我想在那里使用的端口。

关于python - PySerial FileNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27004683/

相关文章:

python - 如何展平 pandas DataFrame 中的分层列索引?

python - 如何在 django 中自定义 UserCreationForm 验证

python - 为什么字典看起来是颠倒的?

python - Pandas ( python ): Fill empty cells with with previous row value?

python - 为什么 nosetests 说 --with-coverage 不是一个选项?

python - 向每个组 pandas python 添加序列计数

python - 如何通过python读取同一文件夹中多个docx文件中的表

python - 如何使用 python 将 plotly graph 保存为 excel 工作表图像?

python - 如何在 Python 中将 float 转换为 10 次方的科学记数法?

java - GMP有任何限制吗?