python - 沉默记录器和打印到屏幕 - Python

标签 python logging printing mechanize

我的 python 脚本有问题。

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


编辑:

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

我已经将这些设置为 false 但运气不好!

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

有什么想法吗?

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

最佳答案

(基于您的第二次编辑)

如果您不想禁用所有输出,您可以尝试特定于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

关于python - 沉默记录器和打印到屏幕 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605117/

相关文章:

html - page-break-* 不适用于 Chrome 和 Safari

python - 3 个 cython/python 函数调用之间的差异

python - 将多个列值更改为二进制值

sql - 使用触发器记录对数据库表的更改

ruby-on-rails - RestClient 记录响应

javascript - 尝试使用 getElementById 在 Javascript 中打印正确答案

python - 图的节点数不匹配

python - 通过 child_process 从 Python 向 Node 发送 JSON 如果太长会被截断,如何修复?

java - 以编程方式从 log4j 获取日志事件

c# - 获取使用 Adob​​e PDF 打印机打印的 PDF 文件名