我正在为使用 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 对象。
我确实尝试过谷歌,但找不到任何东西。
无需猜测帮助在做什么,只需阅读源代码即可。
内置函数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。