直到最近我还在愉快地使用 Win 7 + Python.x 和 PySerial。
最近我升级到了 Win 10,现在我在运行一些 Python 串行代码时遇到了问题,这些代码是我在 Win 7 上运行的。
但是,我什至可以运行以下简单示例: 使用 pySerial 包的完整示例
在所有 PySerial 相关代码上,我得到的是相同的错误:
Traceback (most recent call last):
File ".\t.py", line 10, in <module>
bytesize=serial.SEVENBITS
File "C:\Python37\lib\site-packages\serial\serialwin32.py", line 31, in __init__
super(Serial, self).__init__(*args, **kwargs)
File "C:\Python37\lib\site-packages\serial\serialutil.py", line 240, in __init__
self.open()
File "C:\Python37\lib\site-packages\serial\serialwin32.py", line 78, in open
self._reconfigure_port()
File "C:\Python37\lib\site-packages\serial\serialwin32.py", line 222, in _reconfigure_port
'Original message: {!r}'.format(ctypes.WinError()))
serial.serialutil.SerialException: Cannot configure port, something went wrong. Original message: OSError(22, 'The parameter is incorrect.', None, 87)
但是,我发现这是由来自
win32.SetCommState(self._port_handle, ctypes.byref(comDCB)):
的调用
serialwin32.py
引发的异常
这个调用返回0,表明有问题,但是当我将其注释掉时,我可以让串行通信再次工作。
还有其他人经历过这种情况吗?
从 Windows 7 切换到 Windows 10 时,这似乎是 pyserial 的一个“已知问题”。用户 @BrendanSimo 建议 解决方法之一是创建一个从 serial.Serial
类继承的新类并覆盖
_reconfigure_port()
忽略凸起的方法 serial.SerialException
class MySerial( serial.Serial ):
def _reconfigure_port( self, *args, **kwargs ):
try:
super()._reconfigure_port( *args, **kwargs )
except serial.SerialException:
pass