【问题标题】:How to access help() answers from script如何从脚本访问 help() 答案
【发布时间】:2023-03-06 09:39:02
【问题描述】:

在交互模式下使用 python 时,cppyy 通过 python 的 help() 函数提供极好的信息。我想在非交互式 python 脚本中访问这些答案。这可能吗?

【问题讨论】:

  • 您想对帮助消息做什么?
  • 您可以将sys.stdout 重定向到stringIO 流以捕获输出。

标签: python cppyy


【解决方案1】:

我同意@jakub 的观点,只要您不解释您想对结果做什么,您的问题就不清楚。重点是,是的,很容易捕获help() 输出,这与cppyy 无关,它是纯python 的东西。参见例如下面的示例代码。

但是help(和pydoc)只是使用inspect 模块来查询类型和文档/cmets(对于cppyy,这些主要是__doc__ 字符串)。 Iow.,使用该模块可能会给您比纯字符串信息更易于管理的结果。

如果 OTOH 问题真的是关于获取 help() 显示的 C++ 反射信息,那么我参考这个答案:Can I get the AST from cppyy

import cppyy
import io
import pydoc

class StringPager:
    def __init__(self, sio):
        self._sio = sio

    def __call__(self, text):
        self._sio.write(text)

    def __enter__(self):
        self._orgpager = pydoc.pager
        pydoc.pager = self

    def __exit__(self, tp, val, trace):
        pydoc.pager = self._orgpager


helptxt = io.StringIO()

with StringPager(helptxt):
    pydoc.doc(cppyy.gbl.gInterpreter)

print(helptxt.getvalue())

【讨论】:

  • 问题是我通过 cppyy 从 c++ 获得的错误消息是不可读的。我写了一个粗糙的漂亮打印程序。以下是其中一行错误消息的输出:
  • 我无法读取通过 cppyy 传递的复杂错误消息。我写了一个粗糙的漂亮打印程序。这是的输出
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2015-08-25
  • 2023-03-30
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多