我的python脚本出现了问题。
它在屏幕上打印大量数据,我想阻止各种打印进行屏幕显示。
修改
我正在使用的库是 mechanize ,它在屏幕上打印了大量数据。
我把它们设置为假而没有运气!
br.set_debug_redirects(False)
br.set_debug_responses(False)
br.set_debug_http(False)
有什么想法吗?
帮助会很棒,非常感谢!
答案 0 :(得分:10)
(基于您的第二次编辑)
如果您不想禁用所有输出,可以尝试特定于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)并且再也看不到它,你可以定义自己的类文件类,只丢弃这些对象:
class Discarder(object):
def write(self, text):
pass # do nothing
# now discard everything coming out of stdout
sys.stdout = Discarder()
而且,为了增加可能的解决方案,这里有一个适用于Unix shell的解决方案:
# discards all input (change /dev/null to a file name to keep track of output)
python yourScript.py > /dev/null
答案 1 :(得分:2)
您可以将sys.stdout和sys.stderr重定向到文件或任何文件,例如您的对象。
class EatLog(object):
def write(self):
pass
sys.stdout = EatLog()
但我不建议这样做,更简单的选择是使用操作系统级重定向,例如
python myscript.py > out.log
答案 2 :(得分:0)
您也可以使用StringIO
模块,而不是滚动自己的stdout流。有时,stdout需要的不仅仅是write
方法(flush
是另一种常见方法),StringIO将处理它。
import StringIO
import sys
sys.stdout = StringIO.StringIO()