मैं subprocess
मॉड्यूल का उपयोग कर पाइथन के साथ कमांड लाइन चैट बॉट के साथ संवाद करने की कोशिश कर रहा हूं। (Http://howie.sourceforge.net/ संकलित Win32 द्विआधारी का उपयोग कर, मैं अपने कारणों से है!)पायथन सबप्रोसेस इंटरैक्शन, मेरी प्रक्रिया Popen.communicate के साथ क्यों काम करती है, लेकिन Popen.stdout.read() नहीं?
यह काम करता है: प्रक्रिया के लिए
proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
output = proc.communicate()
लेकिन Popen.communicate
इंतजार समाप्त करने के लिए (और यह भेजता EOF ?), मैं इसके साथ बातचीत करने में सक्षम होना चाहता हूं। इस के लिए स्पष्ट समाधान/stdout
पढ़ने, लिखने के लिए गया था stdin
तो जैसे:
यह काम नहीं करता:
proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
while True: print proc.stdout.readline()
(ध्यान दें कि मैं वास्तव में पर http://code.activestate.com/recipes/440554/ आधारित और अधिक जटिल कोड का उपयोग कर रहा है, लेकिन मुद्दा है वही।)
समस्या यह है कि दूसरा दृष्टिकोण cmd से संचार करने के लिए पूरी तरह से काम करता है, लेकिन जब मैं चैटबॉट चलाता हूं, कुछ भी नहीं। तो मेरा सवाल है, Popen.communicate() का उपयोग करने के लिए आउटपुट कैप्चर करने में यह अलग कैसे है?
यानी मैं सामान्य रूप से कमांड लाइन का उपयोग करने के लिए दूसरे दृष्टिकोण का उपयोग कर सकता हूं, जब तक कि मैं चैटबॉट चलाता हूं, जिस बिंदु पर मैं आउटपुट प्राप्त करना बंद कर देता हूं। पहले दृष्टिकोण का उपयोग बॉट से आउटपुट की पहली कुछ पंक्तियों को सही ढंग से प्रदर्शित करता है, लेकिन मुझे इसके साथ बातचीत करने में असमर्थ छोड़ देता है।
क्यों धन्यवाद, स्टडिन ने चैटबॉट को 'Popen.communicate' के रूप में ठीक से शुरू करने की अनुमति दी, हालांकि अब मुझे यह मुद्दा है कि मुझे इससे बात करने में सक्षम होना चाहिए ... – SudoNhim
शायद आपका एप्लिकेशन लाइन पढ़ रहा है -बाय-लाइन, किस मामले में आप इसे वापस जवाब देने के लिए केवल एक पंक्ति भेज सकते हैं? आप जिस सटीक कार्य को प्राप्त करने का प्रयास कर रहे हैं वह क्या है? – vmalloc
लेकिन स्टडीन बंद होने के बाद मैं इसे इनपुट कैसे भेज सकता हूं? मैं लाइन-बाय-लाइन – SudoNhim