RestructuredText,文档字符串和Python交互式shell

6
我正在使用reStructuredText来记录我的代码,以便通过epydoc生成漂亮的离线HTML页面。结果非常出色。唯一的缺点是,当我使用Python交互式shell时,help()函数无法解析文档字符串中的reST元数据,而是将整个字符串原样显示。是否有办法让help()对文档字符串进行一些最小的解析?我不希望呈现斜体字体或超链接,但至少进行一些最小的清理以增加可读性。

我认为您可以编写自己的 help()。这并不像看起来的那么困难;只需一些 inspect 代码和启动分页器即可。真的不会很难。 - ulidtko
让自定义help()更容易(例如通过在pydoc模块中公开更多功能)将是在http://bugs.python.org上提出良好的功能请求。 - ncoghlan
这个现有的问题也可能会引起兴趣:https://dev59.com/XXM_5IYBdhLWcg3w3nRs(虽然不完全相同,但相关性足够大) - ncoghlan
1个回答

4
help()函数是由site模块添加到内置命名空间的,您可以通过在路径上创建一个sitecustomize.py模块来自定义它(显然通常保存在site-packages中)。
然后,在sitecustomize.py文件中添加任何自定义内容即可。
您可以采用以下几种方式进行处理:
如果要更改help()函数本身的行为,请使用装饰器将其包装起来,例如:
def help_wrapper(func):
    def inner(*args):
        results = func(*args)
        return your_cleanup_function_here(results)
help = help_wrapper(help)

我个人更倾向于稍微不同的解决方案,因为无法确定您的清理函数对非RestructuredText编写的输出有何帮助。
所以我会创建一个包装器函数:
def my_help(*args):
    return your_cleanup_function_here(help(*args))

如果您需要,通过这种方式,您仍然可以访问原始的help()函数。

注意:在sitecustomize.py中进行操作时要小心,因为您在此处所做的任何操作都可能会影响您整个解释器会话(以及每个解释器会话),这有时可能会导致意外后果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接