Python 如何将Sphinx警告重定向到stdout,但将错误保留在stderr中
在Sphinx构建中,所有警告和错误都写在Python 如何将Sphinx警告重定向到stdout,但将错误保留在stderr中,python,stdout,python-sphinx,stderr,Python,Stdout,Python Sphinx,Stderr,在Sphinx构建中,所有警告和错误都写在stderr中。但是,我只希望在stderr中写入错误,在stdout中写入警告 有什么方法可以实现这一点吗?除非您将斯芬克斯作为一个包加载并对其机械进行修补,否则无法更改: sphinx\cmdline.py: <...> def main(argv=sys.argv[1:]): <...> status = sys.stdout warning = sys.stderr error = sys.stde
stderr
中。但是,我只希望在stderr
中写入错误,在stdout
中写入警告
有什么方法可以实现这一点吗?除非您将
斯芬克斯作为一个包加载并对其机械进行修补,否则无法更改:
sphinx\cmdline.py
:
<...>
def main(argv=sys.argv[1:]):
<...>
status = sys.stdout
warning = sys.stderr
error = sys.stderr
if args.quiet:
status = None
if args.really_quiet:
status = warning = None
if warning and args.warnfile:
try:
warnfp = open(args.warnfile, 'w')
<...>
warning = Tee(warning, warnfp) # type: ignore
error = warning
<...>
with patch_docutils(), docutils_namespace():
app = Sphinx(srcdir, confdir, outdir, doctreedir, args.builder,
confoverrides, status, warning, args.freshenv,
args.warningiserror, args.tags, args.verbosity, args.jobs)
app.build(args.force_all, filenames)
return app.statuscode
def main(argv=sys.argv[1:]):
状态=sys.stdout
警告=sys.stderr
错误=sys.stderr
如果args.quiet:
状态=无
如果args.really_quiet:
状态=警告=无
如果警告和args.warn文件:
尝试:
warnfp=open(args.warnfp文件'w')
警告=T形三通(警告,警告FP)#类型:忽略
错误=警告
使用修补程序\u docutils(),docutils\u命名空间()
app=Sphinx(srcdir、confdir、outdir、doctreedir、args.builder、,
混淆、状态、警告、args.freshNV、,
args.warningiserror、args.tags、args.verbosity、args.jobs)
app.build(args.force_all,文件名)
返回app.statuscode
正如您所看到的,Sphinx
甚至没有一个单独的错误和警告构造函数参数。这是一种奇怪的要求。stdout代表程序的结果(其思想是它可以被管道中的下一个程序解析),stderr代表任何不属于它的部分。你想达到什么目的?谢谢你的帮助。在我的运行时环境中,写入stderr的内容将触发失败。我不希望警告消息触发故障,只有错误才应该这样做。那么,也许是您的环境需要修补。根据我先前的消息。也许您的sentinel可以使用用户提供的正则表达式来检测错误/非错误消息。或者,您的环境在设计时似乎考虑到将警告视为错误,这是一种有效且合理的思维方式,适用于具有高可靠性要求的域,如内核驱动程序和嵌入式系统(和CPython pull请求:))。因此,为了与它保持一致,您不应该忽略警告,相反:直接sphinx
将它们视为错误。毕竟,sphinx
警告意味着生成的文档中的某些内容无法工作。听起来很合理。谢谢你的建议。