win32.SetCommState 在 win10 中使用 Pyserial

问题描述 投票:0回答:1

直到最近我还在愉快地使用 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,表明有问题,但是当我将其注释掉时,我可以让串行通信再次工作。

还有其他人经历过这种情况吗?

python windows-10 pyserial
1个回答
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

	
© www.soinside.com 2019 - 2024. All rights reserved.