如何抑制或禁用reSTructuredText中的警告?
我正在用Python开发一个内容管理系统(CMS),它使用reStructuredText(通过docutils)来格式化内容。我的很多内容都是从其他地方导入的,通常是一些没有格式的文本文件。reST在这方面表现得很好,因为它默认会让所有内容看起来比较整洁。
不过,我遇到一个问题,就是我的网页服务器会把警告信息输出到错误日志中,并且这些警告还会出现在我的页面内容里。比如,我在网页上看到的警告信息是这样的:
系统消息:警告/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 个回答
3
看起来,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
,这样就不会显示任何错误。(你可以根据自己的需求来设置。)
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']
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。