2015-09-08 35 views
0

我想在程序中提供類似於IPython的交互式提示。具有自動完成類和對象的自定義交互式終端(CLI)

我想有特點是:

  • 自定義提示
  • 上對象的方法自動完成和屬性
  • 執行的方法,讀/寫屬性的錯誤
  • 顯示文檔字符串

到目前爲止,我一直在玩readline自動完成callba ck功能和魔術方法,如__dir__,__doc____dict__

我確定我可以實現這樣的解決方案,但我正在尋找一個可以爲我完成這項工作的現有模塊。

在我的想法,我想用這樣的:

class Foo: 
    def Say(self): 
     return "The answer is 42" 
foo = Foo() 

cli = Cli() # The terminal interface I want to have 
cli.RegisterObject(foo, showAttributes = True, showProtected = True) 
cli.AddCommand('exit', exit) 
cli.Start(defaultPrompt = ">") 

一個朋友建議我使用IPython的,而不是定製的解決方案。不幸的是,IPython對於我的應用程序來說太開放了,新手們肯定會感到困惑。我不希望最終用戶能夠訪問所有內容。

在年底,我們將有這樣的事情:

$ ./cli.py 
>foo.<tab> 
Say 
>foo.Say() 
The answer is 42 
>bar.AreYouHere() 
Unknown command! 
>exit 

一些相關的問題是:

不幸的是,答案建議使用cmd模塊,這不是我所需要的。

+1

[嵌入IPython的](HTTP是可用的(包括實施例)提供了很多附加的配置選項:// IPython中。組織/ IPython的-DOC/2 /互動/#的reference.html嵌入)。比製作​​IPython更好,因爲它是_is_ IPython。 :-) – theB

+0

這是一個實際的答案 – theB

回答

2

Embed IPython。比製作​​IPython更好,因爲它是IPython。

至少,啓動一個IPython的會話涉及:

from IPython import embed 
embed() 

有在IPython Reference