2009-12-20 19 views
5

मैं प्रोग्रामिंग के लिए बहुत नया हूं इसलिए यदि मेरा प्रश्न बहुत मूर्खतापूर्ण है तो मैं पहले से क्षमा चाहता हूं।Python2.6 की तुलना में यह कोड Python3.1 में अलग-अलग व्यवहार क्यों करता है?

#!/usr/bin/python2.6 
import subprocess, time 
p=subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
for i in 'abcd': 
    p.stdin.write(str.encode(i+'\n')) 
    output=p.stdout.readline() 
    print(output) 
    time.sleep(1) 

अजगर 2.6 प्रिंट पत्र ए, बी, सी, डी में इस कोड को निष्पादित, उत्पादन की प्रत्येक पंक्ति एक दूसरे के बाद दिखाई देता है। यह व्यवहार की उम्मीद है। लेकिन पायथन 3.1 में निष्पादन output=p.stdout.readline() पर अवरुद्ध है। पायथन 3.1 के लिए इसे कैसे ठीक करें?

+0

वास्तव में क्या होता है जब निष्पादन अवरुद्ध है? क्या आपको कोई त्रुटि दिखाई दे सकती है? – Ben

+0

त्रुटियों में नहीं, केवल इनपुट के लिए संकेत देता है; इस कोड को एक अनुमान यह बफरिंग में मतभेद हो सकता है पर टर्मिनल विंडो –

+5

में मार डाला गया था; यदि आप लिखने के बाद p.stdin.flush पर कॉल जोड़ते हैं तो कुछ बदलता है? –

उत्तर

3

बफरिंग में एक अंतर दिखता है। p.stdin.flush() कॉल जोड़ने से समस्या हल हो गई। (उपरोक्त टिप्पणियां देखें)।

समुदाय विकी के रूप में मैं इस उत्तर के लिए कोई क्रेडिट के लायक है, लेकिन कुछ जवाब के रूप में चिह्नित स्वीकार कर लिया जाना चाहिए।

[@Geo पॉप:। कृपया इस सवाल का, "स्वीकार" के रूप में यह जाहिरा तौर पर सही है]

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