से प्रगति संदेश प्राप्त करना मैं एक प्रोग्राम शुरू करना चाहता हूं जिसे पूरा होने में कई मिनट की आवश्यकता है। इस समय के दौरान मैं कार्यक्रम के प्रगति संदेश को पढ़ना चाहता हूं (जो stdout पर मुद्रित हैं)। समस्या यह है कि मुझे अपने रन के दौरान अपने आउटपुट को पढ़ने का कोई तरीका नहीं मिल रहा है।एक उपप्रोसेसर
एक प्रोग्राम के आउटपुट को पढ़ने के लिए मैंने पाया एकमात्र फ़ंक्शन Popen.communicate()
है, लेकिन यह विधि प्रक्रिया समाप्त होने तक प्रतीक्षा करती है। इसलिए प्रगति प्राप्त करना असंभव है और इसे उपयोगकर्ता को विशेष रूप से स्वरूपित तरीके से दिखाना असंभव है।
क्या यह एक और तरीका करना संभव है?
जब मैं अपनी स्क्रिप्ट के साथ subprocess.popen
के साथ प्रक्रिया चलाता हूं तो मुझे स्क्रीन पर प्रोग्राम का आउटपुट दिखाई देता है। क्या इसे छिपाना संभव है? (उबंटू 10.10, सामान्य टर्मिनल)
यदि लूप को तोड़ने के बाद कुछ डेटा आता है तो क्या होगा? – Neo
@ नीओ: उसका उदाहरण ईओएफ पर टूट जाता है, जिसका मतलब है कि उसके बाद कोई और डेटा नहीं आ सकता है। लेकिन, अपने प्रश्न के निहितार्थ का उत्तर देने के लिए: यदि आप stdout पाइप को नहीं पढ़ते हैं, तो बफर भर सकता है और उपप्रोसेस stdout लिखने का प्रयास अवरुद्ध कर देगा। – payne
यह बाद में उपयोग करने के लिए p.stdout में आपके लिए इंतजार कर रहा होगा। हालांकि जब तक नया इनपुट नहीं आता है या पाइप बंद हो जाता है तब तक रीडलाइन कॉल अवरुद्ध हो जाएगा। कुछ उदाहरण स्क्रिप्ट जोड़ा गया। – chmullig