本程序的目的是用Python语言通过GPIB控制两台测量仪器。在
Inst_A:由CPython和PyVISA控制(在IronPython中尚不可用)。
Inst\u B:通过制造商提供的DLL库控制;IronPython及其__import clr__
我尝试过Python.NET,但返回的是file not found exception,而同样的命令在IronPython中也可以使用。可能与this?有关吗
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> clr.AddReference('QDInstrument')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
System.IO.FileNotFoundException: Unable to find assembly 'QDInstrument'.
at Python.Runtime.CLRModule.AddReference(String name)
目前,inst_b.py将在IronPython下运行,并将在一个循环中重复执行新的Python实例以及几个参数到inst_a.py中。在
有没有办法在整个采集过程中保持inst峎y活动,并能够接收来自inst峎y的输入数据?从某种意义上说就像一个倾听者?在
操作系统版本:Windows 7 Professional SP1 amd64
Python版本:3.5.1
Python.NET版本:2.1.0(来自pip)
谢谢,
保罗。在
根据denfromufa和this thread,只需要在添加引用之前添加DLL的路径(在IronPython中不需要)
只是提供绝对的路径clr.AddReference结果为
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
。在根据my comment,我将集中讨论最后一个问题:在Python和IronPython之间IPC的首选方式。
首先,任何IPC都涉及两件事:
我知道的唯一一个内置的“python-specific”IPCchannel是
multiprocessing.Queue
(及其派生)。但它只在子进程是用multiprocessing
模块启动时才起作用的,这在这里不适用。在因此,您只能使用操作系统提供的IPC度量。这个话题太宽泛了,无法深入研究细节。乍一看,如果您希望传递的是一系列数据消息(而不是信号),那么管道或套接字就会被认为是一种与平台无关且立即显而易见的方式。在
至于数据格式,可分为两组:
第一个组是“simple&stuble”(r),对它可以保存(和恢复)的对象没有约束,但是由于后者,它本质上是不安全的。它还固有地依赖于对象的内部表示,因此在不同的代码基之间和在单一体系结构之外可能不兼容。在
pickle
是Python第一种类型的内置格式。注意上面的警告,如果基础基元类型的长度相同,则可以期待内置类型的兼容性。在json
是第二种灵活格式的一个例子,struct
是固定格式的一个例子。在如果您使用流,您还需要以某种方式将传入的字节流拆分为消息。一种简单的方法是发送
<data_length>
(以一种与平台无关的约定格式),然后发送<payload>
,另一种可能的方法是使用分隔符(在有效载荷中决不能出现这种情况)。在相关问题 更多 >
编程相关推荐