【问题标题】:Silence loggers and printing to screen - Python静音记录器并打印到屏幕 - Python
【发布时间】:2011-02-06 00:01:45
【问题描述】:

我的 python 脚本有问题。

它在屏幕上打印大量数据,我想防止各种打印到屏幕上。


编辑:

我使用的库是 mechanize,它在屏幕上打印大量数据。

没有运气,我将这些设置为 false!

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

有什么想法吗?

帮助将是惊人的,非常感谢!

【问题讨论】:

  • 您能提供更多信息吗?你在说什么剧本?它打印什么样的数据?你能显示一些代码吗?你在使用外部脚本吗?

标签: python logging printing mechanize


【解决方案1】:

(基于您的第二次编辑)

如果您不想禁用所有输出,可以尝试特定于mechanize 本身。 http://wwwsearch.sourceforge.net/mechanize/ 提供了一个 sn-p,我已经对其进行了修改(虽然我不确定它是否会起作用):

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

【讨论】:

  • 感谢您的精彩回复!抱歉,True/False 错字
  • AttributeError: 'Discarder' 对象没有属性 'flush'
【解决方案2】:

您可以将 sys.stdout 和 sys.stderr 重定向到文件或任何文件,例如您的对象,例如

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

sys.stdout = EatLog()

但我不建议这样做,更简单的选择是使用操作系统级别的重定向,例如

python myscript.py > out.log

【讨论】:

  • 如果你也需要重定向标准错误(在 bash 中)python myscript.py 2>&1 > out.log
【解决方案3】:

您也可以使用StringIO 模块,而不是滚动您自己的标准输出流。有时,stdout 需要的不仅仅是 write 方法(flush 是另一种常见的方法),StringIO 将处理这些方法。

import StringIO
import sys

sys.stdout = StringIO.StringIO()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2012-02-15
    • 2011-08-10
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多