2010-10-13 6 views
8

मेरे पास दो पायथन अनुप्रयोग हैं। मुझे उनके बीच कमांड और डेटा भेजने की आवश्यकता है (दो प्रक्रियाओं के बीच)। ऐसा करने का सबसे अच्छा तरीका क्या है?दो पायथन अनुप्रयोगों के बीच डेटा का आदान-प्रदान कैसे करें?

एक प्रोग्राम एक डेमॉन है जो किसी अन्य जीयूआई एप्लिकेशन से कमांड और पैरामीटर स्वीकार करना चाहिए।

यह नौकरी बनाने के दौरान, जीयूआई से कॉमांड की निगरानी करने के लिए डिमन कैसे बना सकता है? मैं समाधान पसंद करता हूं crossplatform होगा।

पेज। मैं pyqt4 और पायथन का उपयोग करें।

+1

http://stackoverflow.com/questions/3902997/capturing-output-from-buffered-stdout-program/3905899#3905899 –

+0

ओह, उपयोगी लिंक के समान। धन्यवाद। खोज करते समय इसे ठोकर नहीं लगाया। – PocketSam

उत्तर

10

आप डाटा इंटरचेंज के लिए निम्न विधियों का उपयोग कर सकते हैं:

  1. सॉकेट प्रोग्रामिंग: क्यूटी में आप QtNetwork मॉड्यूल पहुँच सकते हैं। उदाहरण

  2. आईपीसी के लिए qt सहायक देखें: QSharedMemory क्लास में लागू साझा मेमोरी का उपयोग करें।

  3. इस आवेदन यूनिक्स ओएस पर चलने केवल, तो आप डाटा इंटरचेंज के लिए Posix आधारित संदेश कतार आदि की कोशिश कर सकते

  4. DBUS होगा: आप दोनों अजगर खोजने के लिए और क्यूटी होगा DBus आधारित है समर्थन करते हैं। पायथन के मामले में आपको प्रासंगिक मॉड्यूल ढूंढना होगा।

  5. मल्टी प्रसंस्करण मॉड्यूल

  6. पाइप उर्फ ​​Posix/SystemV आधारित आईपीसी तंत्र का उपयोग करना, कतार, आदि

+0

क्या यह केवल पायथन का उपयोग कर अनुप्रयोगों के बीच बातचीत करने के लिए सकारात्मक है? उदाहरण के लिए subprocess मॉड्यूल और Popen.communicate के साथ। आपको लगता है कि क्यूटी लाइब्रेरी का उपयोग करना आसान होगा? – PocketSam

+0

-1: सामान्य पाइप और सामान्य sys.stdin और sys.stdout का उल्लेख करने में विफल। –

+0

@ एस। लॉट - मुझे यकीन नहीं है कि इस मामले में 'sys.stdin' उपयोगी होगा यदि यह एक जीयूआई के साथ संचार करने वाला एक डिमन है क्योंकि यह संभावना नहीं है कि एक बार प्रक्रिया दूसरे लॉन्च हो जाएगी। –

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 

विंडोज के तहत, इस वजह से रास्ते से बुरा व्यवहार प्रदर्शन कर सकते हैं विंडोज अप सरल फ़ाइल botches आईओ रीडायरेक्ट करता है।

संबंधित मुद्दे