重定向 python 交互式帮助()

Nat*_*n W 5 python qt pyqt4

我正在为使用 Qt 的应用程序开发交互式 python shell。但是我似乎无法获得重定向的交互式帮助。我的 python 代码中有这个:

class OutputCatcher:
    def __init__(self):
        self.data = ''
    def write(self, stuff):
        self.data += stuff

sys.stdout = OutputCatcher()
Run Code Online (Sandbox Code Playgroud)

然而,当我运行 help() 时,它不会重定向交互式帮助,它只是将其转储到我运行 python 脚本的控制台。如果我在控制台中按 ctrl+c ,它就会将其发送到我的 OutputCatcher 对象。

我确实尝试过谷歌,但找不到任何东西。

Dun*_*can 2

无需猜测帮助在做什么,只需阅读源代码即可。

内置函数help是在 site.py 中创建的,它是 class 的实例_Helper。调用时,它只是将调用委托给pydoc.help(...)您可以在 pydoc.py 中找到的源。

class _Helper(object):
    """Define the built-in 'help'.
    This is a wrapper around pydoc.help (with a twist).

    """

    def __repr__(self):
        return "Type help() for interactive help, " \
               "or help(object) for help about object."
    def __call__(self, *args, **kwds):
        import pydoc
        return pydoc.help(*args, **kwds)
Run Code Online (Sandbox Code Playgroud)

pydoc.Helperpydoc.help 是输入/输出设置为sys.stdin,的一个实例sys.stdout,但是(我怀疑这就是您遇到问题的地方)它在导入 pydoc 时使用 stdin/stdout 的值,因此稍后重新绑定它们不会有什么影响。

我建议您用自己的 _Helper 类替换内置帮助实例,该类会使用您需要的任何文件显式创建一个新的 pydoc Helper。