重定向python interactive help()

2024-09-28 05:20:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个使用Qt的应用程序开发一个交互式pythonshell。然而,我似乎无法获得交互帮助来重定向。我在python代码中有这样的代码:

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

sys.stdout = OutputCatcher()

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

我确实尝试过谷歌,但什么也找不到。在


Tags: 代码selfdatainitdefstdoutsyshelp
2条回答

Help不仅转储到stdout,还与终端交互。它也永远不会在shell之外使用,所以它不会被编写来保证这些东西能够正常工作。在

您所要做的是实现一个终端,这是一项非常重要的任务,但是可能存在Qt的现有终端仿真库。甚至可能是用Python编写的,当然还有绑定。在

不需要猜测帮助在做什么,只需阅读源代码。在

help内置项是在中创建的站点.py,它是_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)

在pydoc.help是pydoc.Helper的一个实例,其输入/输出设置为sys.stdinsys.stdout,但是(我怀疑这是您遇到问题的地方)它在导入pydoc时使用stdin/stdout的值,因此以后重新绑定它们不会有任何效果。在

我建议您用自己的帮助器类替换内置的help实例,该类显式地用所需的任何文件创建一个新的pydoc帮助器。在

相关问题 更多 >

    热门问题