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
->
>>>

更新於:2020年6月26日

瀏覽量:385

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.