簡體   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