2012-11-06 62 views
7

我想自動縮進控制檯應用程序的下一行,但用戶需要能夠將其刪除。 sys.stdout.writeprint使不可刪除的字符,我不能寫入sys.stdin(據我所知)。我本質上是試圖讓智能縮進,但我只能越來越深入地嵌套。關於如何爬出來的任何想法?我可以在python輸入緩衝區中插入可刪除的字符嗎?

編輯:我應該注意到這是使用IronPython的Windows程序的一部分。雖然我可以做更多更有趣的事情(未來可能),但我希望能夠以很少的努力作爲出發點,快速獲得合理愉快的體驗。

+3

爲什麼要將此作爲控制檯應用程序? (這聽起來像它可能值得另一種方法)。如果你想讓用戶在控制檯上自由移動光標,你可能想使用ncurses而不是內置方法。 –

+1

這將運行在什麼平臺上?如果是Linux,你可以考慮使用readline模塊。 – Keith

+0

在Windows上有一個[pyreadline](http://pypi.python.org/pypi/pyreadline)。 – Apalala

回答

1

cmd模塊爲創建程序的命令行界面提供了非常簡單的界面。它可能無法將一些緩衝區字符放在下一行的前面,但如果您正在尋找讓用戶知道該命令已返回的顯而易見的方式,則它可以在每個開頭處提供一個類似shell的提示線。如果你已經擁有的功能定義爲你的程序,將它們集成到處理器將編寫訪問功能的處理程序的問題:

import cmd 
import math 

def findHpyot(length, height): 
    return math.sqrt(length **2 + height **2) 

class MathProcessor(cmd.Cmd): 
    prompt = "Math>" 

    def do_hypot(self, line): 
     x = raw_input("Length:") 
     y = raw_input("Height:") 
     if x and y: 
      try: 
       hypot = findHypot(float(x), float(y)) 
       print "Hypot:: %.2f" %hypot 
      except ValueError: 
       print "Length and Height must be numbers" 

    def do_EOF(self, line): 
     return True 

    def do_exit(self, line): 
     return True 

    def do_quit(self, line): 
     return True 

if __name__ == "__main__": 
    cmdProcessor = MathProcessor() 
    cmdProcessor.cmdloop() 

事情使用CMD

    寫一個交互shell時要考慮
  1. do_之後的名稱是您的用戶將使用的命令,以便在此示例中,可用的命令將是hypot,退出,退出和幫助。
  2. 沒有覆蓋do_help,呼籲幫助會給你可用的命令
  3. 要退出任何通話清單如果你要處理函數調用中條目的程序應該返回True
  4. ,說你想能夠處理類似「hypot 3 4」的呼叫,您可以在函數調用中使用本地線路變量
相關問題