如何从脚本访问 help() 答案

Posted

技术标签:

【中文标题】如何从脚本访问 help() 答案【英文标题】:How to access help() answers from script 【发布时间】:2021-12-07 16:38:51 【问题描述】:

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

【问题讨论】:

您想对帮助消息做什么? 您可以将sys.stdout 重定向到stringIO 流以捕获输出。 【参考方案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 传递的复杂错误消息。我写了一个粗糙的漂亮打印程序。这是的输出

以上是关于如何从脚本访问 help() 答案的主要内容,如果未能解决你的问题,请参考以下文章

通常如何从 Google Apps 脚本访问 BigQuery

如何从模板脚本访问 AngularJS 变量

如何在单独的 js 文件中使用访问 django 模板变量,而不是在同一个 html 文件中包含小脚本块?

如何从 Tcl 脚本访问第三方 DLL?

如何从脚本命令访问 process.env 变量

如何使用python脚本自动将数据从访问中提取到excel中