2016-07-08 3 views
3

При попытке импортировать серийный я получаю следующее сообщение об ошибке:Ошибка на Python последовательного импорте

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 

я установил последнюю версию pySerial, Python 2.7 подножки на ноутбуке WinXP. Пробовал везде и не нашел подобной проблемы. Есть ли для этого решение? Заранее спасибо ...

ответ

3

Версия pySerial, которую вы используете, пытается вызвать function, который доступен только в Windows Vista, тогда как вы используете Windows XP.

Возможно, стоит поэкспериментировать с использованием старой версии pySerial.

Этот код был added to pySerial on 3 May 2016, поэтому версия, предшествующая этому, может быть хорошим началом.

+0

Как сообщило , получил более старую версию (3.0), и она работала правильно. Благодаря! – Hagah

2

Старые версии кажутся недоступными. Но это работает для меня (при условии, nanpy версии 3.1.1):

  1. Открыть файл \ Lib \ сайта-пакеты \ серийный \ serialwin32.py
  2. Удалять методы _cancel_overlapped_io(), cancel_read(), cancel_write() в строках 436-455 почти на Боттона файла
  3. метод
  4. изменения _close() ALS следующим образом:

(Python)

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. 
1

И в серийных \ win32.py комментариев

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

Пожалуйста, не могли бы вы расширить свой ответ и объяснить, как это может решить проблему? – zuazo