我有两个python应用程序。我需要在它们之间发送命令和数据(在两个进程之间)。 这样做的最好方法是什么?如何在两个python应用程序之间交换数据?
一个程序是一个守护程序,它应该接受来自另一个GUI应用程序的命令和参数。
如何让守护进程监视来自GUI的命令,同时使其工作? 我更喜欢解决方案将跨平台。
p.s.我使用pyqt4和python。
我有两个python应用程序。我需要在它们之间发送命令和数据(在两个进程之间)。 这样做的最好方法是什么?如何在两个python应用程序之间交换数据?
一个程序是一个守护程序,它应该接受来自另一个GUI应用程序的命令和参数。
如何让守护进程监视来自GUI的命令,同时使其工作? 我更喜欢解决方案将跨平台。
p.s.我使用pyqt4和python。
您可以使用以下方法进行数据交换:
Socket编程:在Qt您可以访问QtNetwork模块。请参阅qt助手示例
IPC:使用在QSharedMemory类中实现的共享内存。
如果这个应用程序将运行在UNIX操作系统而已,那么你可以尝试基于POSIX消息队列等的数据交换
DBUS:你会发现Python和Qt的已经基于的DBus支持。在python的情况下,你需要找到相关的模块。
使用多处理模块
使用POSIX的/ SystemV IPC机制又名管道,队列等
仅使用python的应用程序之间进行交互是否可行?例如使用子流程模块和Popen.communicate。你认为使用Qt库会是easyer吗? – PocketSam 2010-10-13 10:46:29
-1:无法提及普通管道和普通的sys.stdin和sys.stdout。 – 2010-10-13 11:09:09
@S。洛特 - 我不确定'sys.stdin'在这种情况下是否有用,如果它是一个与GUI进行通信的守护进程,因为一旦这个进程不可能启动另一个进程。 – 2010-10-13 12:14:43
虽然它不涉及到通信的方式,我建议检出pickle/cPickle模块(可以将对象编码为串流,反之亦然)。很有用。
示例。
Program_1.py
import pickle
import sys
for i in range(100):
pickle.dump(i,sys.stdout)
Program_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搞砸了简单的文件IO重定向。
类似于http://stackoverflow.com/questions/3902997/capturing-output-from-buffered-stdout-program/3905899#3905899 – 2010-10-13 09:09:40
哦,有用的链接。谢谢。搜索时没有绊倒它。 – PocketSam 2010-10-13 10:51:29