2010-10-13 77 views
8

我有兩個python應用程序。我需要在它們之間發送命令和數據(在兩個進程之間)。 這樣做的最好方法是什麼?如何在兩個python應用程序之間交換數據?

一個程序是一個守護程序,它應該接受來自另一個GUI應用程序的命令和參數。

如何讓守護進程監視來自GUI的命令,同時使其工作? 我更喜歡解決方案將跨平臺。

p.s.我使用pyqt4和python。

+1

類似於http://stackoverflow.com/questions/3902997/capturing-output-from-buffered-stdout-program/3905899#3905899 – 2010-10-13 09:09:40

+0

哦,有用的鏈接。謝謝。搜索時沒有絆倒它。 – PocketSam 2010-10-13 10:51:29

回答

10

您可以使用以下方法進行數據交換:

  1. Socket編程:在Qt您可以訪問QtNetwork模塊。請參閱qt助手示例

  2. IPC:使用在QSharedMemory類中實現的共享內存。

  3. 如果這個應用程序將運行在UNIX操作系統而已,那麼你可以嘗試基於POSIX消息隊列等的數據交換

  4. DBUS:你會發現Python和Qt的已經基於的DBus支持。在python的情況下,你需要找到相關的模塊。

  5. 使用多處理模塊

  6. 使用POSIX的/ SystemV IPC機制又名管道,隊列等

+0

僅使用python的應用程序之間進行交互是否可行?例如使用子流程模塊和Popen.communicate。你認爲使用Qt庫會是easyer嗎? – PocketSam 2010-10-13 10:46:29

+0

-1:無法提及普通管道和普通的sys.stdin和sys.stdout。 – 2010-10-13 11:09:09

+0

@S。洛特 - 我不確定'sys.stdin'在這種情況下是否有用,如果它是一個與GUI進行通信的守護進程,因爲一旦這個進程不可能啓動另一個進程。 – 2010-10-13 12:14:43

2

雖然它不涉及到通信的方式,我建議檢出pickle/cPickle模塊(可以將對象編碼爲串流,反之亦然)。很有用。

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重定向。

相關問題