मैं एक शोध उपकरण लिख रहा हूं और मैंने हाल ही में पाइथन में निर्मित लॉगर कार्यक्षमता का उपयोग करने के लिए "प्रिंट" कथन का उपयोग करने से स्विच किया है। यह, मैंने तर्क दिया, मुझे उपयोगकर्ता को स्क्रीन पर डंप करने के अलावा आउटपुट को फ़ाइल में डंप करने का विकल्प देने की अनुमति होगी।बाहरी एप्लिकेशन से लॉग इन
अभी तक इतना अच्छा है। पाइथन में मेरे कोड का हिस्सा स्क्रीन और फ़ाइल दोनों को डंप करने के लिए "logger.info" और "logger.error" का उपयोग करता है। "लॉगर" मॉड्यूल-चौड़ा लॉगर है। यह हिस्सा एक आकर्षण की तरह काम करता है।
हालांकि, कई बिंदुओं पर, मैं खोल के माध्यम से निष्पादन योग्य चलाने के लिए "subprocess.call" का उपयोग करता हूं। तो, कोड भर में, मैं की तरह
proc = subprocess.call(command)
लाइनों इस आदेश से आउटपुट स्क्रीन पर प्रिंट, हमेशा की तरह होता है, लेकिन यह है कि उपयोगकर्ता निर्दिष्ट फ़ाइल को डंप नहीं होगा।
एक संभावित विकल्प फाइल करने के लिए एक पाइप को खोलने के लिए होगा:
proc = subprocess.call(command, stdout=f, stderr=subprocess.OUTPUT)
लेकिन वह केवल फाइल करने के लिए स्क्रीन के लिए नहीं डंप और होगा।
असल में, मेरा प्रश्न इस पर उबलता है: क्या कोई तरीका है कि मैं अपने मौजूदा लॉगर का लाभ उठा सकता हूं, विशेष रूप से subprocess.call के लिए फ़ाइलों के लिए एक और हैंडलर बनाने के बिना? (शायद आउटपुट को लॉगर में रीडायरेक्ट करके?) या यह मौजूदा सेटअप के बाद असंभव है? यदि उत्तरार्द्ध, मैं सेटअप कैसे सुधार सकता हूं?
(ओह, भी, यह बहुत अच्छा है, तो लॉगिंग 'वास्तविक समय' में थे हो सकता है, ताकि निष्पादन से संदेश लॉग ऑन हैं के रूप में वे प्राप्त कर रहे हैं।)
किसी भी मदद के लिए धन्यवाद! :)
लेनार्ट रीगेब्रो [स्ट्रीम लॉगर क्लास] (http://stackoverflow.com/a/4838875/190597) आपकी स्थिति में अच्छी तरह से काम करेगा। – unutbu
संदर्भ के लिए धन्यवाद! यह मेरे मामले के लिए बहुत अच्छा काम करता है। –