如何在两个Python应用之间交换数据?
我有两个Python应用程序。我需要在它们之间发送命令和数据(也就是在两个进程之间)。
其中一个程序是一个后台服务,它需要接受来自另一个图形界面应用程序的命令和参数。
我该如何让这个后台服务在执行任务的同时,能够监控来自图形界面的命令呢?我希望这个解决方案能够在不同的平台上都能使用。
附注:我使用的是pyqt4和Python。
3 个回答
0
示例。
程序_1.py
import pickle
import sys
for i in range(100):
pickle.dump(i,sys.stdout)
程序_2.py
from __future__ import print_function
import pickle
import sys
while True:
obj= pickle.load(sys.stdin)
print( obj )
用法:
Program_1.py | Program_2.py
在Windows系统下,这可能会出现一些问题,因为Windows在处理简单的文件输入输出重定向时会搞得很糟糕。
2
虽然这和沟通的“方式”没有直接关系,但我建议你看看pickle/cPickle模块(这个模块可以把对象转换成字符串流,也可以把字符串流转换回对象)。这个功能非常实用。
11
你可以使用以下方法来进行数据交换:
套接字编程:在Qt中,你可以使用QtNetwork模块。可以查看Qt助手获取示例。
进程间通信(IPC):使用QSharedMemory类来实现共享内存。
如果这个应用只在Unix操作系统上运行,你可以尝试基于Posix的消息队列等方法来进行数据交换。
DBUS:你会发现Python和Qt都支持基于DBus的功能。如果使用Python,你需要找到相关的模块。
使用多进程模块。
使用基于Posix/SystemV的IPC机制,比如管道、队列等。