我正在使用Qt为应用程序开发交互式python shell。但是我似乎无法获得重定向的交互式帮助。我在我的python代码中有这个:
class OutputCatcher:
def __init__(self):
self.data = ''
def write(self, stuff):
self.data += stuff
sys.stdout = OutputCatcher()
然而,当我运行help()时,它不会重定向交互式帮助,它只是将其转储到我运行python脚本的控制台。如果我在控制台中按ctrl + c然后将其发送到我的OutputCatcher对象。
我确实试过谷歌,但实际上找不到任何东西。
答案 0 :(得分:2)
帮助不只是转储到stdout,而是与终端进行交互。它也绝不意味着在shell之外使用,所以不会写它来保证这些东西有效。
你要做的是实现一个终端,这是一个非常重要的任务,但是Qt可能存在现有的终端仿真库。可能甚至用Python编写,当然还有绑定。
答案 1 :(得分:1)
没有必要猜测有什么帮助,只需阅读来源。
help
内置版是在site.py中创建的,它是类_Helper
的一个实例。调用它时,只需将调用委托给您在pydoc.py中找到的源pydoc.help(...)
。
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.stdin
,sys.stdout
,但是(我怀疑这是你遇到问题的地方)它使用的值导入pydoc时的stdin / stdout,所以稍后重新绑定它们不会有任何影响。
我建议您使用自己的_Helper类替换内置帮助实例,该类可以使用您需要的任何文件显式创建新的pydoc Helper。