如何在两个Python应用程序之间交换数据?
我有两个 python 应用程序。我需要在它们之间(两个进程之间)发送命令和数据。 最好的方法是什么?
一个程序是一个守护进程,它应该接受来自另一个 GUI 应用程序的命令和参数。
我怎样才能让守护进程在正常工作的同时监控来自 GUI 的命令? 我更喜欢跨平台的解决方案。
ps我使用pyqt4和python。
I have two python applications. I need to send commands and data between them (between two processes).
What is the best way to do that?
One program is a daemon who should accept commands and parameters from another GUI application.
How can I make daemon to monitor comands from GUI, while making it's job?
I prefer solution would be crossplatform.
p.s. I use pyqt4 and python.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用以下方法进行数据交换:
Socket 编程:在 Qt 中您可以访问 QtNetwork 模块。请参阅qt助手示例
IPC:使用 QSharedMemory 类中实现的共享内存。
如果这个应用程序仅在unix操作系统上运行,那么您可以尝试基于Posix的消息队列等进行数据交换
DBUS :您会发现 python 和 Qt 都有基于 DBus 的支持。如果是 python,您需要找到相关模块。
使用多处理模块
使用基于 Posix/SystemV 的 IPC 机制,又名管道、队列等。
You can use the following methods for data interchange:
Socket Programming : In Qt you can access QtNetwork module. See qt assistant for examples
IPC : Use shared Memory implemented in QSharedMemory class.
If this application will run on unix os only, then you can try Posix based message queue etc. for data interchange
DBUS : You will find both python and Qt have DBus based support. In Case of python you need to find the relevant module.
Using Multi Processing module
Using Posix/SystemV based IPC mechanism aka pipes, queue, etc.
虽然它与通信方式无关,但我建议检查 pickle/cPickle 模块(它可以将对象编码为字符串流,反之亦然)。非常有用。
While it's not related to the way of the communication, I recommend checking out the pickle/cPickle module (which can encode objects into string streams and vice versa). Very useful.
例子。
Program_1.py
Program_2.py
用法:
在 Windows 下,这可能会表现出不良行为,因为 Windows 搞砸了简单文件 IO 重定向。
Example.
Program_1.py
Program_2.py
Usage:
Under Windows, this may exhibit bad behavior because of the way Windows botches up simple file IO redirects.