2011-12-13 15 views
6

जब मैं अजगर के साथ इस कोड को निष्पादित करने के 3.2.2स्वरूपण तार() अजगर 3.x में

working_file = subprocess.Popen(["/pyRoot/iAmAProgram"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) 

working_file.stdin.write('message') 

मैं समझता हूँ की कोशिश मैं एक समस्या है जहाँ मैं त्रुटियों मिल रही है कि अजगर 3 तारों को संभालने के तरीके को बदल दिया लेकिन मुझे समझ नहीं आया कि 'संदेश' को कैसे प्रारूपित किया जाए। क्या कोई जानता है कि मैं इस कोड को वैध कैसे बदलूं?

बहुत धन्यवाद

जॉन

अद्यतन: यहाँ त्रुटि संदेश मैं मिल

Traceback (most recent call last): 
    File "/pyRoot/goRender.py", line 18, in <module> 
    working_file.stdin.write('3') 
TypeError: 'str' does not support the buffer interface 
+0

आप त्रुटि संदेश भूल गया। –

उत्तर

2

अपने त्रुटि संदेश "लेखन त्रुटि: 'str' बफर इंटरफ़ेस का समर्थन नहीं करता" है? वह त्रुटि संदेश आपको बिल्कुल गलत बताता है कि क्या गलत है। आप स्ट्रिंग ऑब्जेक्ट्स को उस sdtin पर नहीं लिखते हैं। तो आप क्या लिखते हैं? खैर, बफर इंटरफ़ेस का समर्थन करने वाला कुछ भी। आम तौर पर यह बाइट वस्तुओं है।

तरह:

working_file.stdin.write(b'message') 
7

मैं पिछले जवाब से सहमत (के लिए छोड़कर "त्रुटि संदेश आपको बताता है कि वास्तव में क्या गलत है" भाग), लेकिन मैं इसे पूरा करने के लिए करना चाहते हैं।

1) हर स्ट्रिंग सांकेतिक शब्दों में बदलना पहले इससे पहले कि आप उन्हें पाइप पर लिखें::

तो मामला आप एक स्ट्रिंग है कि आप (और नहीं एक बाइट वस्तु) पाइप में लिखना चाहते है कि है, आपके पास दो विकल्प
working_file.stdin.write('message'.encode('utf-8')) 

2) एक बफ़र पाठ इंटरफेस में पाइप कि एन्कोडिंग करना होगा लपेटें:

stdin_wrapper = io.TextIOWrapper(working_file.stdin, 'utf-8') 
stdin_wrapper.write('message') 

(ध्यान दें कि मैं/हे अब बफ़र है, तो आप stdin_wrapper.flush कॉल करने के लिए आवश्यकता हो सकती है() ।)

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