2012-06-01 1 views
3

Ранее я использовал PyVisa1.4 в Python2.7, и все работает нормально. Теперь мне нужно использовать Pyvisa1.4 в Python3.2.Как использовать Pyvisa1.4 в Python3.2, появилось много непредвиденных ошибок

Я знал, что некоторый синтаксис изменен в Python3.2. Поэтому я использую 2to3 для преобразования исходных файлов Pysiva .py в новый формат, который должен соответствовать Python3.2.

Но теперь возникает непредвиденная ошибка, связанная с ctypes. И я прочитал пакет Pyvisa .py и попытался исправить это, но до сих пор не знаю, как это сделать.

Я просто пытаюсь использовать простой get_instruments_list() команды, как показано ниже:

>>> import visa 
>>> get_instruments_list() 
Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    get_instruments_list() 
    File "C:\Python32\Lib\site-packages\pyvisa\visa.py", line 254, in get_instruments_list 
    vpp43.find_resources(resource_manager.session, "?*::INSTR") 
    File "C:\Python32\Lib\site-packages\pyvisa\vpp43.py", line 581, in find_resources 
instrument_description) 
ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type 

Основная проблема я столкнулся в том, как правильно использовать PyVisa в Python3.2.

+0

http://stackoverflow.com/questions/8605036/importerror-no-module-named –

+0

@Alex.Мой вопрос полностью отличается от этого. Причина, по которой он получил эту ошибку, заключается в том, что он использует синтаксис 'Python2.'. Но я использовал '2to3' для преобразования формата' pyvisa'. –

+0

Я думал, что, возможно, вы сможете попробовать без 2to3, подобно тому, что он сделал –

ответ

-1

Новейшая версия Pyvisa не поддерживает Python3.2

Даже thouhg конвертирования синтаксиса Pyvisa1.4 для Python2.X в Python3.X с помощью 2to3 инструмента, он по-прежнему не будет работать

+2

Это на самом деле не совсем так. Хотя он не поддерживается, вы можете использовать скрипт 2to3 для преобразования большинства изменений, а ошибки, которые появляются, являются фиксируемыми. Много раз это простое преобразование ascii (эта ошибка исправлена, помещая 'bytes (string, 'ascii')' где «строка» является вторым аргументом в вызове. Эта конкретная ошибка возникает много, но она всегда одно и то же. – LiverpoolFTW

0

Проблема заключается в том, ула который передается как второй аргумент. В Python 3 str была радикально изменена для поддержки юникода. Для исправления этой проблемы все строки перед передачей в библиотеку DLL должны быть закодированы в ASCII. Обратно, возвращаемые строки возвращаются, так как байты должны быть преобразованы обратно в str.

я исправил это на visa.py, на

CR = "\r" replaces CR = b"\r" 
LF = "\n" replaces LF = b"\n" 

ResourceTemplate INIT

self.vi = vpp43.open(resource_manager.session, resource_name.encode("ASCII"), 
          keyw.get("lock", VI_NO_LOCK)) 

вместо

self.vi = vpp43.open(resource_manager.session, resource_name, 
          keyw.get("lock", VI_NO_LOCK)) 

Instrument.write

vpp43.write(self.vi, message.encode("ASCII")) 

вместо

vpp43.write(self.vi, message) 

наоборот на read_raw окончательного возвращения заменяется

return str(buffer) 

и get_instruments_list()

vpp43.find_resources(resource_manager.session, "?*::INSTR".encode("ASCII")) 
2

PyVISA 1.5 (который находится в бета теперь) обеспечивает, среди прочего, полную поддержку Python 3. Взгляните на (новую) документацию для получения инструкций о том, как загрузить последнюю версию для разработки: http://pyvisa.readthedocs.org/

Смежные вопросы