我正在尝试为使用 32 位 Python 二进制文件的 64 位 Redhawk 开发组件,但我不确定在运行此特定组件时如何配置 Redhawk 使用 32 位 Python 而不是 64 位 Python。我需要使用 32 位 Python 的原因是因为我正在使用一个仅适用于 32 位 Python的库(PyVisa, http ://pyvisa.readthedocs.org/en/latest/)(请参阅https://decibel.ni .com/content/docs/DOC-2928)。
我正在使用 PyVisa 来控制实验室设备(即安捷伦信号发生器)以校准接收器。我知道这可能看起来像是 Redhawk 的一种奇怪用法,但是将信号发生器调整到某个频率和功率水平与控制接收器/发射器时需要执行的操作非常相似。
我宁愿不安装 32 位 CentOS 只是为了开发和测试这 1 个组件,我假设在我的系统上同时安装 32 位和 64 位 Redhawk rpms 会同样麻烦。
我已经在我的系统上同时安装了 32 位 Python 和 64 位 Python,并手动将 32 位 Python 二进制文件重命名为“python_32”并将其放在路径 (/usr/bin/) 上。我试图通过将实现文件顶部的 shebang 更改为来强制 Redhawk 使用 32 位 Python 可执行文件
#!/usr/bin/env python_32
但是,它没有用,所以我尝试了
#!/usr/bin/python_32
这也没有用。
请参阅下面的示例以获取骨架实现,为清楚起见,删除了所有样板导入和函数定义。
#!/usr/bin/python_32
import visa
def process(self):
sg = visa.instrument("TCPIP::10.2.8.236")
print sg.ask("*IDN?")
return NORMAL
每次我尝试启动包含此组件的简单波形时,都会收到以下错误。这是我在尝试在 64 位 Python 中使用 PyVisa 库时收到的相同错误,这就是为什么我认为 Redhawk 忽略了我的 shebang 语句,该语句指定了 32 位 Python 的路径。
OSError: /usr/local/vxipnp/linux/bin/libvisa.so.7: wrong ELF class: ELFCLASS32
Traceback (most recent call last):
File "/var/redhawk/sdr/dev/.DevMgr_orion/GPP_orion/components/sendSCPI/python/sendSCPI.py", line 9, in <module>
import visa
File "/usr/lib/python2.6/site-packages/PyVISA-1.5.dev0.dev-py2.6.egg/visa.py", line 237, in <module>
resource_manager = ResourceManager()
File "/usr/lib/python2.6/site-packages/PyVISA-1.5.dev0.dev-py2.6.egg/vpp43.py", line 85, in __new__
it.init(*args, **kwds)
File "/usr/lib/python2.6/site-packages/PyVISA-1.5.dev0.dev-py2.6.egg/visa.py", line 230, in init
self.session = self.vi = vpp43.open_default_resource_manager()
File "/usr/lib/python2.6/site-packages/PyVISA-1.5.dev0.dev-py2.6.egg/vpp43.py", line 788, in open_default_resource_manager
visa_library().viOpenDefaultRM(byref(session))
File "/usr/lib/python2.6/site-packages/PyVISA-1.5.dev0.dev-py2.6.egg/vpp43.py", line 162, in __call__
self.load_library()
File "/usr/lib/python2.6/site-packages/PyVISA-1.5.dev0.dev-py2.6.egg/vpp43.py", line 131, in load_library
self.__lib = self.__cdecl_lib = cdll.LoadLibrary(path)
File "/usr/lib64/python2.6/ctypes/__init__.py", line 431, in LoadLibrary
return self._dlltype(name)
File "/usr/lib64/python2.6/ctypes/__init__.py", line 353, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /usr/local/vxipnp/linux/bin/libvisa.so.7: wrong ELF class: ELFCLASS32
作为参考,我正在运行 Redhawk 版本 1.9.0。CentOS 6.4 x64 上的 x64。
如果有更好的方法通过 Redhawk 控制我的实验室设备,我也愿意。