2009-11-07 17 views
6

के लिए apt-get install का पार्सिंग आउटपुट मैं सिस्टम पर कुछ सरल कार्य करने के लिए एक साधारण जीयूआई पायथन स्क्रिप्ट पर काम कर रहा हूं। कुछ पैकेजों को स्थापित करने के लिए उस कार्य में से कुछ apt-get install शामिल हैं।प्रगति पट्टी

यह चालू होने पर, मैं एक प्रगति पट्टी प्रदर्शित करना चाहता हूं जो टर्मिनल में एपीटी-गेट इंटरफ़ेस में दिखाए गए छोटे प्रतिशत का उपयोग करके डाउनलोड की प्रगति के साथ अद्यतन होना चाहिए।

लेकिन! मुझे प्रगति जानकारी प्राप्त करने का कोई तरीका नहीं मिल रहा है। एपीटी-गेट के आउटपुट को पिपिंग या रीडायरेक्ट करने से केवल स्थिर लाइनें मिलती हैं जो प्रत्येक पैकेज के लिए "पूर्ण डाउनलोड" संदेश दिखाती हैं, और मेरी स्क्रिप्ट में subprocess.Popen() के माध्यम से पढ़ने के लिए समान होती हैं।

फ़ाइल डाउनलोड के प्रतिशत प्राप्त करने के लिए मैं एपीटी-गेट के आउटपुट से कैसे पढ़ सकता हूं?

उत्तर

3

जैसा कि मैंने अक्सर कहा है, का उपयोग pexpect, नहीं उपप्रक्रिया आदि, उप प्रक्रियाओं को चलाने के लिए जब आप उनके सतत उत्पादन प्राप्त करने के लिए की जरूरत है। pexpect subprocess को टर्मिनल पर चलने पर विश्वास करने के लिए मूर्ख बनाता है, इसलिए उपप्रोसेसर केवल वास्तविक प्रकार के आउटपुट प्रदान करेगा जो वास्तविक टर्मिनल पर देगा ... और आप इसे पकड़ सकते हैं और इसे किसी भी प्रकार के फैंसी आउटपुट में बदल सकते हैं! -)

+0

कोई भी मौका यह मेरे सी पोर्ट में काम कर सकता है और साथ ही posix popen() का उपयोग कर सकता है? या क्या एक समान विधि है? –

+2

'popen' subprocess को यह पता चलेगा कि इसका आउटपुट एक पाइप है, इसलिए आप संभवतया किस्मत से बाहर हैं जो कमांड के अलावा पर्याप्त हैं, ताकि आप उन्हें "पूर्ण अनबफर किए गए रीयलटाइम आउटपुट के लिए पूछ सकें!" और मुझे नहीं लगता कि एपीटी-मिल उस कुलीन समूह में है। लिनक्स के तहत सी में "नकली टर्मिनल" को लागू करने के लिए, पीटीआई (7) मैन पेज से शुरू करें, उदा। http://linux.die.net/man/7/pty पर - और, शुभकामनाएं (बहुत सारे काम की आवश्यकता होगी!)। –

5

एपीटी-प्राप्त के आउटपुट को पार्स करने के बजाय, आप पैकेज स्थापित करने के लिए पायथन-एपीटी का उपयोग कर सकते हैं। AFAIK में प्रगति की रिपोर्ट करने के लिए मॉड्यूल भी हैं।

+0

/usr/share/doc/python-apt/examples/progress.py – unutbu

+0

पाइथन के बिना ऐसा करने का कोई तरीका और libapt की बड़ी गड़बड़ी के बिना? –

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