[原]关于在Python和C#之间消息传递的问题
问题的描述:
鉴于Python强大的网络功能和丰富的开源组件和C#开发Windows Form程序时优秀的框架,使用Python和C#混合编程可以有效的结合二者的长处,快速开发产品。
然而在这两者之间如何进行消息/数据的传递便成为一个首要的问题。
解决思路:
想在这两者之间方便进行对象转换Json是个首选的技术(关于Json的介绍就不复述了,可以参考文献[1])。既然选定了使用Json作为消息传递的格式,我们可以有两种方案处理这个问题:
一、通过中间文件传递Json字符串
在Python中将需要传递到C#的对象组装成列表,转换为Json字符串,将该字符串写入文件,然后再在C#端将该文件读出来,反序列化为对象列表即可。
话不多说,直接上代码:
Python端代码:
注:这里只贴了核心代码。至于如何将自定义Python转换为Json字符串可以参考文献[2]。
C#端代码:
二、通过返回值传递Json字符串
在Python端将对象列表转换成的Json字符串直接返回,在C#端直接捕获该返回值,然后反序列化为对象列表,代码如下:
Python端
C#端
这种方式省略了对中间文件的读写操作,较少了程序运行的时空开销。
参考文献:
【1】介绍Json http://www.json.org/json-zh.html
【2】使用Json作为Python和C#混合编程时对象转换的中间文件 http://www.cnblogs.com/chaosimple/p/4035693.html
【3】Best way to return a value from a Python script http://stackoverflow.com/questions/18231415/best-way-to-return-a-value-from-a-python-script
[原]关于在Python和C#之间消息传递的问题的更多相关文章
- Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型
Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型 一丶互斥锁 含义: 每个对象都对应于一个可称为" 互斥锁&qu ...
- Java Web开发和Python Web开发之间的区别
今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...
- python,pycharm,anaconda之间的区别与联系 - python基础入门(2)
Python环境配置-Pycharm下载/Anaconda安装 中我们已经完成了 Pycharm 和Anaconda 的安装.可能对于刚接触的小伙伴还是比较懵逼的,一会python一会Anaconda ...
- 《Python》进程之间的通信(IPC)、进程之间的数据共享、进程池
一.进程间通信---队列和管道(multiprocess.Queue.multiprocess.Pipe) 进程间通信:IPC(inter-Process Communication) 1.队列 概念 ...
- 关于CGI:Tomcat、PHP、Perl、Python和FastCGI之间的关系
如前文所述,Web服务器是一个很简单的东西,并不负责动态网页的构建,只能转发静态网页.同时Apache也说,他能支持perl,生成动态网页.这个支持perl,其实是apache越位了,做了一件额外的事 ...
- 深入浅出web服务器与python应用程序之间的联系
简单来说,Web服务器是在运行在物理服务器上的一个程序,它永久地等待客户端(主要是浏览器,比如Chrome,Firefox等)发送请求.Web 服务器接受 Http Request,返回 Respon ...
- python 实现线程之间的通信
前言:因为GIL的限制,python的线程是无法真正意义上并行的.相对于异步编程,其性能可以说不是一个等量级的.为什么我们还要学习多线程编程呢,虽然说异步编程好处多,但编程也较为复杂,逻辑不容易理解, ...
- Python不同包之间调用注意事项
1.不同包之间调用,因为在不同文件夹下,引用的时候加上包名就可以了.运行时,在eclipse直接运行没有问题.但是在,命令行运行时出现找不到模块的错误.原因是,Python只搜索当前目录和内置模块以及 ...
- 【原】关于Python中setuptools安装的问题
在生成package的时候,需要在setup.py中引入setuptools包,可是却报告如下错误: ImportError: No module named setuptools 解决办法就是下载s ...
随机推荐
- BZOJ.4894.天赋(Matrix Tree定理 辗转相除)
题目链接 有向图生成树个数.矩阵树定理,复习下. 和无向图不同的是,度数矩阵改为入度矩阵/出度矩阵,分别对应外向树/内向树. 删掉第i行第i列表示以i为根节点的生成树个数,所以必须删掉第1行第1列. ...
- BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)
题目链接 建边不说了.对于议案'?'的输出用拓扑不好判断,直接对每个议案的结果DFS,看是否会出现矛盾 Tarjan也用不到 //964kb 76ms #include <cstdio> ...
- prufer序列计数的一些结论
\(prufer\)序列和完全图的生成树一一对应(考虑构造) 完全图的生成树个数为\(n^{n - 2}\) 满足第\(i\)个点的度数为\(d_i\)的生成树为\(\frac{n!}{\prod ( ...
- 牛客练习赛27.B.手办(枚举)
题目链接 orz zzx! 题目看似要求\[\sum_{k=1}^n\sum_{a=1}^k\sum_{b=1}^k[k\mid a\times b]\] 实际我们可以求\[\sum_{k=1}^n\ ...
- LVS 之搭建
部署LVS 10.0.0.20 [root@node1 ~]# yum -y install ipvsadm 进入到 /usr/src 目录查看结果,如果有ip_vs_rr.ip_vs,表示正常 [r ...
- javascript中ajax的四大步骤
原生js中ajax写法一: function ajaxys(){ //1. 创建xhr对象 var xhr = new XMLHttpRequest();//XMLHttpRequest() // 2 ...
- 简单的proxy之TinyHTTPProxy.py
简单的proxy之TinyHTTPProxy.py 如果是在外企工作的话,可以访问美国的机器,这样就可以在美国的机器上为自己装个proxy,然后本地就可以很容易的使用proxy来上网了. TinyHT ...
- C#中使用 SendMessage 向非顶端窗体发送组合键
开门见山,不废话了, 直接举例说明一下: 比如发送ALT + F 以下是 用spy++截取的消息内容 <00001> 000310DC P WM_SYSKEYDOWN nVirtKey:V ...
- springboot之启动原理解析及源码阅读
前言 SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开SpringBoot的神秘面 ...
- [C++] 左值、右值、右值引用
一般意义上的左值(lvalue)和右值(rvalue) * lvalue 代表了对象,可通过取地址符获取地址,可赋值.L 可看做 location. * rvalue 代表了数据,不能获取内存地址,不 ...