如何在两个Python应用之间交换数据?

12 投票
3 回答
6510 浏览
提问于 2025-04-16 05:25

我有两个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

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

  1. 套接字编程:在Qt中,你可以使用QtNetwork模块。可以查看Qt助手获取示例。

  2. 进程间通信(IPC):使用QSharedMemory类来实现共享内存。

  3. 如果这个应用只在Unix操作系统上运行,你可以尝试基于Posix的消息队列等方法来进行数据交换。

  4. DBUS:你会发现Python和Qt都支持基于DBus的功能。如果使用Python,你需要找到相关的模块。

  5. 使用多进程模块。

  6. 使用基于Posix/SystemV的IPC机制,比如管道、队列等。

撰写回答