2011-01-14 47 views
4

我正在爲使用Qt的應用程序開發交互式python shell。但我似乎無法獲得重定向的交互式幫助。我有這個在我的Python代碼:重定向python交互式幫助()

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

sys.stdout = OutputCatcher() 

然而,當我過幫助運行()不重定向交互式的幫助,它只是轉儲出來給我來自哪裏跑了python腳本控制檯。如果我在控制檯中按ctrl + c,然後將它發送到我的OutputCatcher對象。

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

+0

代碼應該在哪個平臺上運行?你是否需要在當前的Python解釋器中運行控制檯,還是可以啓動子進程? – 2011-01-14 12:01:42

+0

平臺將Linux,Windows和OSX,所以幾乎任何東西:) – 2011-01-14 12:12:20

回答

1

沒有必要猜測幫助在做什麼,只需閱讀源代碼。

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是設置爲sys.stdinsys.stdoutpydoc.Helper與輸入/輸出的實例,但(我懷疑這是你有你的問題),它使用標準輸入的/在時間標準輸出值pydoc被導入,所以後來重新綁定它們不會有任何影響。

我建議你用你自己的_Helper類來替換內建的幫助實例,該類可以用你需要的任何文件顯式地創建一個新的pydoc Helper。

1

幫助不只是轉儲到標準輸出,但與終端交互。它也絕不意味着在shell之外使用,所以它不會被寫入來保證這些工作。

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