如何在reSTructuredText中抑制或禁用警告?

时间:2010-10-31 03:48:38

标签: python restructuredtext docutils

我正在使用Python中的CMS,它使用reStructuredText(通过docutils)来格式化内容。我的很多内容都是从其他来源导入的,通常以未格式化的文本文档的形式出现。 reST对此非常有用,因为默认情况下它使一切看起来都非常清晰。

然而,我遇到的一个问题是,我的网络服务器 注入我的网页内容会将警告转发给stderr。例如,我在网页上收到如下警告:

  

系统消息:WARNING / 2(,第296行);反向

我的问题是: 如何抑制,停用或重定向这些警告?

理想情况下,我很乐意将这些内容写入日志文件中,但如果有人可以告诉我如何关闭警告并将其注入我的内容中那么这将是完美的。

负责将reST解析为HTML的代码:

from docutils import core
import reSTpygments

def reST2HTML( str ):
    parts = core.publish_parts(
                          source = str,
                          writer_name = 'html')
    return parts['body_pre_docinfo'] + parts['fragment']

2 个答案:

答案 0 :(得分:10)

def reST2HTML( str ):
    parts = core.publish_parts(
    source = str,
    writer_name = 'html',
    settings_overrides={'report_level':'quiet'},
    )
    return parts['body_pre_docinfo'] + parts['fragment']

答案 1 :(得分:1)

似乎report_level接受字符串是旧版本。现在,以下内容适合我。

import docutils.core
import docutils.utils
from pathlib import Path

shut_up_level = docutils.utils.Reporter.SEVERE_LEVEL + 1
docutils.core.publish_file(
    source_path=Path(...), destination_path=Path(...),
    settings_overrides={'report_level': shut_up_level},
    writer_name='html')

关于级别

# docutils.utils.__init__.py
class Reporter(object):
    # system message level constants:
    (DEBUG_LEVEL,
     INFO_LEVEL,
     WARNING_LEVEL,
     ERROR_LEVEL,
     SEVERE_LEVEL) = range(5)

    ...

    def system_message(self, level, message, *children, **kwargs):
        ...
        if self.stream and (level >= self.report_level  # self.report_level was set by you. (for example, shut_up_level)
                    or self.debug_flag and level == self.DEBUG_LEVEL
                    or level >= self.halt_level):
            self.stream.write(msg.astext() + '\n')
        ...
        return msg

根据上面的代码,您知道可以分配self.report_level(即settings_overrides={'report_level': ...})让警告不显示。

,我将其设置为SERVER_LEVEL+1,因此它不会显示任何错误。 (您可以根据需要进行设置。