昨天大佬阿炳給發了一份代碼給我,看着感覺很好玩,這是自己寫了個命令行嗎,完了我就找篇更詳細一點的博客學習了一下
cmd的主要方法和屬性
方法:
- (1)cmdloop():類似與Tkinter的mainloop,運行Cmd解析器;
- (2)onecmd(str):讀取輸入,並進行處理,通常不需要重載該函數,而是使用更加具體的do_command來執行特定的命令;
- (3)emptyline():當輸入空行時調用該方法;
- (4)default(line):當無法識別輸入的command時調用該方法;
- (5)completedefault(text,line,begidx,endidx):如果不存在針對的complete_*()方法,那么會調用該函數,該函數主要是用於tab補充,且只能在linux下使用。
- (6)precmd(line):命令line解析之前被調用該方法;
- (7)postcmd(stop,line):命令line解析之后被調用該方法;
- (8)preloop():cmdloop()運行之前調用該方法;
- (9)postloop():cmdloop()退出之后調用該方法;
- (10)help_command():對command命令的說明,其中command為可變字符
屬性:
- (1)prompt:交互式提示字符,也就是剛才的(Cmd)可以換成我們自己想要的字符
- (2)intro:在進入交互式shell前輸出的字符串,可以認定為標志語之類的。其實這個可以在preloop方法輸出也是一樣的
代碼:
在阿炳寫的代碼的基礎上根據上面那篇參考博客增加了一點代碼,讓自己更清除的理解
注意以do_和help_開頭的函數的作用(do_ * 開頭為命令,執行的名令,以help_ * 開頭的為幫助,對應命令的幫助說明)
from cmd import Cmd class BingCmd(Cmd): """just try try""" prompt = "BingCmd>" intro = "Welcome to BingCMD" # 在cmd.Cmd派生類中,以do_ * 開頭為命令,以help_ * 開頭的為幫助 def print_log(self, argv): print("la la la ") def do_bing(self, argv): self.print_log(argv) def help_bing(self): print("just print la la la") def do_hu(self, argv): print("調用hu功能") def help_hu(self): print("輸出hu") def do_exit(self, argv): # 處理方法返回True,則直接退出循環。 print("exit()") return True def help_exit(self): print("用來退出") def preloop(self): print("cmdloop()運行之前調用該方法") def postloop(self): print("cmdloop()退出之后調用該方法") if __name__ == "__main__": BingCmd().cmdloop()
運行使用截圖: