[英]Python and IronPython communication inquiry
该程序的目的是使用Python通过GPIB控制两个测量仪器。
Inst_A :由CPython和PyVISA控制(在IronPython中尚不可用)。
Inst_B :通过制造商提供的DLL库控制; IronPython及其__import clr__
我已经尝试使用Python .NET,但返回的文件未找到异常,而相同的命令在IronPython中有效。 可能与此有关吗?
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_a.py在整个采集过程中保持活动状态,并能够从inst_b.py接收输入数据? 从某种意义上说像听众?
操作系统版本:Windows 7 Professional SP1 amd64
Python版本:3.5.1
Python .NET版本:2.1.0(来自pip)
谢谢,
保罗
根据denfromufa和该线程的描述 ,所需要做的只是在添加引用之前添加DLL的路径(在IronPython中不是必需的),
import clr
import os
import sys
sys.path.append(os.path.dirname('__file__'))
仅提供带有SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \\UXXXXXXXX escape
clr.AddReference结果的绝对路径SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \\UXXXXXXXX escape
。
根据我的评论 ,我将重点关注您的最后一个问题: Python和IronPython之间的IPC首选方法。
首先,任何IPC都涉及两件事:
我知道的唯一内置的“特定于Python的” IPC 通道是multiprocessing.Queue
(及其派生类)。 但是,只有在子进程是通过multiprocessing
模块启动的情况下才起作用-在此不适用。
因此,您仅限于操作系统提供的IPC措施。 这个话题太广泛了,无法深入研究。 乍一看,如果它是您希望传递的数据消息序列(而不是信号),管道或套接字将成为一种与平台无关且立即可见的方式。
至于数据格式,可以分为两组:
第一组是“简单且愚蠢的”(r),并且对可以保存(和还原)的对象没有任何限制,但是由于后者的存在,它本质上是不安全的。 它也固有地依赖于对象的内部表示,因此在不同的代码库之间以及单个体系结构之外可能不兼容。
pickle
是Python的第一类内置格式。 请注意上述警告,如果基础基本类型的长度相同,则可以期望与内置类型兼容。 json
是第二种类型的灵活格式的示例, struct
是固定类型的示例。 如果使用流,则还需要以某种方式将传入的字节流拆分为消息。 一种简单的方法是发送<data_length>
(以独立于平台的约定格式),然后发送<payload>
,另一种可能的方法是使用分隔符(在有效载荷中绝不能出现)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.