如何在两个python应用程序之间交换数据?

时间:2010-10-13 09:02:30

标签: python process pyqt4 pid

我有两个python应用程序。我需要在它们之间发送命令和数据(在两个进程之间)。 最好的方法是什么?

一个程序是一个守护程序,它应该接受来自另一个GUI应用程序的命令和参数。

如何使守护进程监控来自GUI的命令,同时使其成为工作? 我更喜欢解决方案是跨平台。

P.S。我使用pyqt4和python。

3 个答案:

答案 0 :(得分:10)

您可以使用以下方法进行数据交换:

  1. 套接字编程:在Qt中,您可以访问QtNetwork模块。有关示例,请参阅qt助手

  2. IPC:使用QSharedMemory类中实现的共享内存。

  3. 如果此应用程序仅在unix os上运行,那么您可以尝试基于Posix的消息队列等进行数据交换

  4. DBUS:你会发现python和Qt都有基于DBus的支持。在python的情况下,你需要找到相关的模块。

  5. 使用多处理模块

  6. 使用基于Posix / SystemV的IPC机制,即管道,队列等

答案 1 :(得分:2)

虽然它与通信的方式无关,但我建议检查pickle / cPickle模块(可以将对象编码为字符串流,反之亦然)。非常有用。

答案 2 :(得分:0)

实施例

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重定向的方式,这可能会表现出不良行为。