繁体   English   中英

Python和IronPython通讯查询

[英]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都涉及两件事:

  • 数据通道(管道/流,系统管理的IPC实体,共享存储)
  • 数据协议(通信程序,数据格式)

我知道的唯一内置的“特定于Python的” IPC 通道multiprocessing.Queue (及其派生类)。 但是,只有在子进程是通过multiprocessing模块启动的情况下才起作用-在此不适用。

因此,您仅限于操作系统提供的IPC措施。 这个话题太广泛了,无法深入研究。 乍一看,如果它是您希望传递的数据消息序列(而不是信号),管道或套接字将成为一种与平台无关且立即可见的方式。


至于数据格式,可以分为两组:

  • 序列化格式和
  • 通讯格式

第一组是“简单且愚蠢的”(r),并且对可以保存(和还原)的对象没有任何限制,但是由于后者的存在,它本质上是不安全的。 它也固有地依赖于对象的内部表示,因此在不同的代码库之间以及单个体系结构之外可能不兼容。

  • pickle是Python的第一类内置格式。 请注意上述警告,如果基础基本类型的长度相同,则可以期望与内置类型兼容。
  • json是第二种类型的灵活格式的示例, struct是固定类型的示例。

如果使用流,则还需要以某种方式将传入的字节流拆分为消息。 一种简单的方法是发送<data_length> (以独立于平台的约定格式),然后发送<payload> ,另一种可能的方法是使用分隔符(在有效载荷中绝不能出现)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM