8

我正在用 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']
4

2 回答 2

11
def reST2HTML( str ):
    parts = core.publish_parts(
    source = str,
    writer_name = 'html',
    settings_overrides={'report_level':'quiet'},
    )
    return parts['body_pre_docinfo'] + parts['fragment']
于 2010-10-31T04:00:44.447 回答
2

似乎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(ie settings_overrides={'report_level': ...})让警告不显示。

我将它设置为SERVER_LEVEL+1,所以它不会显示任何错误。(您可以根据自己的需求进行设置。

于 2020-09-24T08:11:34.090 回答