【发布时间】:2023-03-06 09:39:02
【问题描述】:
在交互模式下使用 python 时,cppyy 通过 python 的 help() 函数提供极好的信息。我想在非交互式 python 脚本中访问这些答案。这可能吗?
【问题讨论】:
-
您想对帮助消息做什么?
-
您可以将
sys.stdout重定向到stringIO流以捕获输出。
在交互模式下使用 python 时,cppyy 通过 python 的 help() 函数提供极好的信息。我想在非交互式 python 脚本中访问这些答案。这可能吗?
【问题讨论】:
sys.stdout 重定向到stringIO 流以捕获输出。
我同意@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())
【讨论】: