如何从脚本访问 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