3

以前我用过PyVisa1.4Python2.7一切正常。现在我需要使用Pyvisa1.4in Python3.2

我知道 Python3.2 中更改了一些语法。因此,我使用2to3将 originalPysiva.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

4

3 回答 3

2

PyVISA 1.5(现在处于测试阶段)提供了完整的 Python 3 支持。查看(新)文档以获取有关如何在http://pyvisa.readthedocs.org/下载最新开发版本的说明

于 2014-02-16T05:07:22.437 回答
0

问题是作为第二个参数传递的 str 。在 Python 3 中 str 被彻底改变以支持 unicode。要更正此问题,所有字符串在传递到 DLL 库之前必须以 ASCII 编码。相反,返回字符串作为字节返回,应该转换回 str。

我已经在 visa.py 上更正了这个,在

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

资源模板初始化

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"))
于 2014-01-09T16:40:39.293 回答
-1

最新版本Pyvisa不支持Python3.2

即使您使用工具将Pyvisa1.4for的语法转换Python2.X为,它仍然无法正常工作Python3.X2to3

于 2012-07-10T01:48:58.687 回答