Python 中對基於行的命令直譯器的支援
cmd 模組只包含一個名為 Cmd 的類。它用作基於行的命令列直譯器使用者定義框架的基類。
Cmd
此類或其子類的物件提供基於行的直譯器框架。下面列出了此類中子類繼承的重要方法。
cmdloop()
此方法將物件放入迴圈中,接受輸入並將輸入傳送到類中相應的命令處理程式方法。
迴圈啟動時,將顯示一條介紹性訊息(作為引數提供給 cmdloop() 方法),並顯示預設 (cmd) 提示符,可以透過 prompt 屬性進行自定義。
直譯器物件將使用者輸入識別為兩部分。以“do_”為字首的第一部分被視為類中的方法,第二部分被視為該方法的引數。例如,如果使用者輸入“hello Python”,直譯器將嘗試執行類中的 do_hello() 方法,並將“Python”作為引數傳送。如果定義了該方法,則將執行該方法,否則將顯示錯誤訊息。
Cmd 的子類繼承了 do_help() 方法。使用者的輸入(例如“help hello”)將獲取 hello() 方法中的文件字串並將其顯示為幫助文字,或者如果存在,則將執行 help_hello() 方法。
以下示例演示了基於行的直譯器框架的應用。程式碼首先匯入 cmd 模組並定義 Cmd 類的子類。
MathOps 類定義了 add、sub、mul 和 div 方法(全部以 do_ 字元為字首),並帶有文件字串文字。
宣告 MathOps 類的物件,並透過呼叫 cmdloop() 方法將其傳送到迴圈中。當用戶在提示符前鍵入 help 時,將顯示所有方法名稱。當鍵入帶有 help 的方法名稱時,將顯示相應方法的文件字串。要呼叫任何方法,請鍵入其名稱、所需引數並按 Enter 鍵。方法的結果將顯示出來,提示符將重複出現,直到發出 ^D 停止迴圈。
from cmd import Cmd
class MathOps(Cmd):
def do_add(self, args):
'''add two numbers'''
num=args.split()
print ('addition:',int(num[0])+int(num[1]))
def do_sub(self, args):
'''subtract two numbers'''
num=args.split()
print ('subtraction:',int(num[0])-int(num[1]))
def do_mul(self, args):
'''multiply two numbers'''
num=args.split()
print ('multiplication:',int(num[0])*int(num[1]))
def do_div(self, args):
'''perform division'''
num=args.split()
print ('division:',int(num[0])/int(num[1]))
def do_EOF(self, args):
return True
op=MathOps()
op.prompt= "->"
op.cmdloop("loop starts. Press ^D to exit")下面顯示了上述指令碼的示例執行結果
loop starts. Press ^D to exit ->help Documented commands (type help ): ======================================== add div help mul sub Undocumented commands: ====================== EOF ->help add add two numbers ->add 5 7 addition: 12 ->div 10 5 division: 2.0 -> >>>
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP