2013-02-22 16 views
6

मैं पाइथन का उपयोग टर्मिनल पर log.txt और STDOUT दोनों को आउटपुट भेजने के लिए करना चाहता हूं। यहां मेरे पास है:पायथन, फ़ाइल और टर्मिनल दोनों को आउटपुट कैसे भेजें

import sys 
class Logger(object): 
    def __init__(self, filename="Default.log"): 
     self.terminal = sys.stdout 
     self.log = open(filename, "a") 

    def write(self, message): 
     self.terminal.write(message) 
     self.log.write(message) 

sys.stdout = Logger("log.txt") 
print "Hello world !"   #This line is saved in log.txt and STDOUT 

यह प्रोग्राम फ़ाइल और stdout पर आउटपुट भेजता है। मेरा सवाल है: फाइल को लिखने के तरीके को कैसे बुलाया जाता है?

उत्तर

3

sys.stdout के लिए documentation से:

stdout और stderr में निर्मित की जरूरत नहीं किया जा फ़ाइल वस्तुओं: किसी भी वस्तु जब तक कि यह एक लिखने() विधि है कि एक स्ट्रिंग तर्क लेता है के रूप में स्वीकार्य है ।

+0

धन्यवाद आदमी, मुझे लगता है कि अब – user192082107

2

अधिक विशेष रूप से, प्रिंट समारोह (यह अभी भी एक कीवर्ड है पायथन 2.x में है, लेकिन यह बात यहाँ नहीं करता है) इस

import sys 
def print(message): 
    sys.stdout.write(message) 
तो

कि, जब आप की तरह कुछ करता है इसे कॉल करें यह sys.stdout पर आपका संदेश प्रिंट करेगा। हालांकि, यदि आप एक .write विधि वाले किसी ऑब्जेक्ट के साथ sys.stdout को ओवरराइट करते हैं, तो यह उस विधि को कॉल करेगा। यह duck-typing का जादू है।

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