繁体   English   中英

Python串行导入时出错

[英]Error on Python serial import

当我尝试导入序列时,我收到以下错误:

Traceback (most recent call last):
  File "C:\Documents and Settings\eduardo.pereira\workspace\thgspeak\tst.py", line 7, in <module>
    import serial
  File "C:\Python27\lib\site-packages\serial\__init__.py", line 27, in <module>
    from serial.serialwin32 import Serial
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 15, in <module>
    from serial import win32
  File "C:\Python27\lib\site-packages\serial\win32.py", line 182, in <module>
    CancelIoEx = _stdcall_libraries['kernel32'].CancelIoEx
  File "C:\Python27\lib\ctypes\__init__.py", line 375, in __getattr__
    func = self.__getitem__(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 380, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'CancelIoEx' not found

我在WinXP笔记本电脑上安装了最新版本的pySerial,Python 2.7。 到处尝试,发现没有类似的问题。 那有什么解决方案吗? 提前致谢...

您正在使用的pySerial版本正在尝试调用仅在Windows Vista中可用的功能 ,而您正在运行Windows XP。

可能值得尝试使用旧版本的pySerial。

有问题的代码已于2016年5月3日添加到pySerial ,因此在此之前的版本可能是一个良好的开端。

旧版本似乎不可用。 但是,这对我有用(假设nanpy版本3.1.1):

  1. 打开文件\\ lib \\ site-packages \\ serial \\ serialwin32.py
  2. 删除方法_cancel_overlapped_io()cancel_read()cancel_write()在第436-455行几乎在文件的botton
  3. 更改方法_close()als如下:

(蟒蛇)

def _close(self):
    """internal close port helper"""
    if self._port_handle is not None:
        # Restore original timeout values:
        win32.SetCommTimeouts(self._port_handle, self._orgTimeouts)
        # Close COM-Port:
        if self._overlapped_read is not None:
            win32.CloseHandle(self._overlapped_read.hEvent)
            self._overlapped_read = None
        if self._overlapped_write is not None:
            win32.CloseHandle(self._overlapped_write.hEvent)
            self._overlapped_write = None
        win32.CloseHandle(self._port_handle)
        self._port_handle = None

另外,在开始通信时创建一个非默认的串行连接,否则你将被绑定到一些linux设备:

a = ArduinoApi(SerialManager("COM5:"))

for i in range(10):
    a.pinMode(13, a.OUTPUT)
    a.digitalWrite(13, a.HIGH)
    # etc.

并在串口\\ win32.py评论

#CancelIoEx = _stdcall_libraries['kernel32'].CancelIoEx
#CancelIoEx.restype = BOOL
#CancelIoEx.argtypes = [HANDLE, LPOVERLAPPED]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM