pyserial 错误 - 无法打开端口

use*_*016 5 python usb pyserial

我在 stackoverflow 中看到了在 Python 3.3 的 USB 端口中使用 pyserial 的简单代码,但我无法让它在我新安装的 pyserial 2.7 [在 Windows 7,64 位,带有 3 个 USB 端口] 上工作。pyserial 的安装很顺利,我可以毫无错误地导入,并且 Pyscripter IDE 中可以识别方法,这增强了对良好安装的信心,但是:

代码精简到产生错误的要点是:

import serial
def main():
  ser = serial.Serial(port='COM2')
  ser.close()

if __name__ == '__main__':
   main
Run Code Online (Sandbox Code Playgroud)

由此我收到一个对话框,其中包含错误“SerialException:无法打开端口“COM2”:FileNotFoundError(2,'系统找不到指定的文件。',无,2)”

回溯指出:

*** Remote Interpreter Reinitialized  ***
>>>
Traceback (most recent call last):
  File "<string>", line 420, in run_nodebug
  File "C:\Python33\Lib\site-packages\scanport2.py", line 19, in <module>
main()
  File "C:\Python33\Lib\site-packages\scanport2.py", line 15, in main
ser = serial.Serial(port='COM2')
  File "C:\Python33\Lib\site-packages\serial\serialwin32.py", line 38, in __init__
SerialBase.__init__(self, *args, **kwargs)
  File "C:\Python33\Lib\site-packages\serial\serialutil.py", line 282, in __init__
self.open()
  File "C:\Python33\Lib\site-packages\serial\serialwin32.py", line 66, in open
raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM2': FileNotFoundError(2, 'The system cannot find the file specified.', None, 2)
Run Code Online (Sandbox Code Playgroud)

导入模块中引发 SerialException 的代码段是:

    # the "\\.\COMx" format is required for devices other than COM1-COM8
    # not all versions of windows seem to support this properly
    # so that the first few ports are used with the DOS device name
    port = self.portstr
    try:
        if port.upper().startswith('COM') and int(port[3:]) > 8:
            port = '\\\\.\\' + port
    except ValueError:
        # for like COMnotanumber
        pass
    self.hComPort = win32.CreateFile(port,
           win32.GENERIC_READ | win32.GENERIC_WRITE,
           0, # exclusive access
           None, # no security
           win32.OPEN_EXISTING,
           win32.FILE_ATTRIBUTE_NORMAL | win32.FILE_FLAG_OVERLAPPED,
           0)
    if self.hComPort == win32.INVALID_HANDLE_VALUE:
        self.hComPort = None    # 'cause __del__ is called anyway
        raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError()))
Run Code Online (Sandbox Code Playgroud)

我确实有一个活动设备连接到 Windows 设备管理器中标识的 COM2。我也尝试过扫描所有端口,但代码在第一次使用serial.Serial时停止

看来win32可能出问题了?

我是 Python 与硬件接口的新手。

Dav*_*son 1

我会尝试以下操作:

  • 拔下并重新插入设备。
  • 重启。
  • 运行WinObj并查看GLOBAL??文件夹;您应该在那里看到 COM2 作为指向更特定于驱动程序的内容的符号链接。
  • 您连接到 COM2 的设备是什么类型?如果它使用 usbser.sys,您可能会更好地在代码中替换 ,但请记住正确转义这些反斜杠\\.\USBSER000COM2
  • 在某些机器上,COM 端口号较低会出现奇怪的问题,我无法解释。尝试在设备管理器中将设备重新分配给 COM6。