我有兩個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