簡體   English   中英

重定向python交互式幫助()

[英]Redirect python interactive help()

我正在使用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對象。

我確實試過谷歌,但真的找不到任何東西。

幫助不只是轉儲到stdout,而是與終端進行交互。 它也絕不意味着在shell之外使用,所以不會寫它來保證這些東西的工作。

你要做的是實現一個終端,這是一個非常重要的任務,但可能存在Qt的終端仿真庫。 可能甚至用Python編寫,當然還有綁定。

沒有必要猜測有什么幫助,只需閱讀來源。

內置的help是在site.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 ,但(我懷疑這是你有你的問題),它使用的標准輸入/ AT的時候是pydoc標准輸出值是導入的,所以以后重新綁定它們將不會有任何影響。

我建議你用你自己的_Helper類替換內置的幫助實例,它會使用你需要的任何文件顯式創建一個新的pydoc Helper。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM