2010-04-09 12 views
5

मुझे अपनी पायथन लिपि में कोई समस्या है।मौन लॉगर्स और स्क्रीन पर प्रिंटिंग - पायथन

यह स्क्रीन पर भारी मात्रा में डेटा प्रिंट कर रहा है, और मैं स्क्रीन के सभी प्रकार के प्रिंटिंग को रोकना चाहता हूं।


संपादित करें:

पुस्तकालय मैं उपयोग कर रहा हूँ है मशीनीकरण, और यह स्क्रीन पर बहुत अधिक डेटा का मुद्रण है।

मैंने इन्हें बिना किसी किस्मत के झूठे सेट कर दिया है!

br.set_debug_redirects(False) 
br.set_debug_responses(False) 
br.set_debug_http(False) 

कोई भी विचार?

सहायता अद्भुत और बहुत सराहना की जाएगी!

+1

क्या आप कुछ और जानकारी दे सकते हैं?आप किस लिपि के बारे में बात कर रहे हैं? यह किस प्रकार का डेटा प्रिंट कर रहा है? क्या आप कुछ कोड दिखा सकते हैं? क्या आप बाहरी स्क्रिप्ट का उपयोग कर रहे हैं? – Ikke

उत्तर

10

(अपने 2 संपादन के आधार पर)

आप सभी उत्पादन निष्क्रिय करने के लिए नहीं करना चाहते हैं, तो आप अपने आप mechanize के लिए विशिष्ट होने की कोशिश कर सकते हैं। http://wwwsearch.sourceforge.net/mechanize/ एक टुकड़ा है, जो मैं संशोधित कर लिया है (हालांकि मुझे यकीन है कि अगर यह काम करेगा नहीं कर रहा हूँ) प्रदान करता है:

import logging 
logger = logging.getLogger("mechanize") 
# only log really bad events 
logger.setLevel(logging.ERROR) 

जब आप कुछ प्रिंट यह sys.stdout फ़ाइल के माध्यम से स्क्रीन को जाता है। आप (जैसे आप खोलना एक लॉग फ़ाइल,) ताकि कुछ भी नहीं स्क्रीन पर छपा है किसी अन्य फाइल करने के लिए इस फ़ाइल को बदल सकते हैं:

import sys 
# save the old stdout so you can print later (do sys.stdout = OLD_STDOUT) 
OLD_STDOUT = sys.stdout 
sys.stdout = open("logfile.txt", 'w') 
बेशक

, अगर आप कुछ पुस्तकालय है कि आप कॉल कर रहे के बारे में बात कर रहे हैं , यह sys.stderr पर प्रिंट हो सकता है। सौभाग्य से, आप इस एक (ऊपर से जारी) के लिए सटीक एक ही बात कर सकते हैं:

OLD_STDERR = sys.stderr 
sys.stderr = open("errorLog.txt", 'w') 
अब अगर, किसी कारण से, आप पूरी तरह से stdout (या stderr) की अनदेखी करने और इसे फिर कभी नहीं, आप कर सकते हैं

अपनी खुद की फ़ाइल की तरह वर्गों को परिभाषित कि बस वस्तुओं त्यागने:

# discards all input (change /dev/null to a file name to keep track of output) 
python yourScript.py > /dev/null 
+0

अजीब उत्तर के लिए धन्यवाद! True/False typo – RadiantHex

2

आप कर सकते हैं: संभव समाधान के शोर में जोड़ने के लिए

class Discarder(object): 
    def write(self, text): 
     pass # do nothing 
# now discard everything coming out of stdout 
sys.stdout = Discarder() 

और,, यहाँ एक समाधान है कि यूनिक्स के गोले में काम करता है sys.std पुनर्निर्देशित करें बाहर और sys.stderr फ़ाइल या किसी भी फ़ाइल जैसे आपकी ऑब्जेक्ट उदा।

class EatLog(object): 
    def write(self): 
     pass 

sys.stdout = EatLog() 

लेकिन मैं उस की सिफारिश नहीं होगा, सरल विकल्प जैसे ओएस स्तर पुनर्निर्देशन उपयोग करने के लिए है

python myscript.py > out.log 
+1

के बारे में खेद है और यदि आपको stderr को भी रीडायरेक्ट करने की आवश्यकता है (bash में) 'python myscript.py 2> और 1> out.log' – cobbal

0

आप StringIO मॉड्यूल, भी, के बजाय अपने खुद के stdout धारा रोलिंग का उपयोग कर सकते हैं। कभी-कभी, stdout को write विधि से अधिक की आवश्यकता होती है (flush एक और आम है), जो स्ट्रिंगियो संभाल लेगा।

import StringIO 
import sys 

sys.stdout = StringIO.StringIO() 
संबंधित मुद्दे