โมดูล cmd มีเพียงคลาสเดียวคือ Cmd ใช้เป็นคลาสฐานสำหรับเฟรมเวิร์กที่ผู้ใช้กำหนดสำหรับตัวแปลคำสั่งบรรทัดคำสั่งแบบบรรทัด (line-oriented command line interpreters)
Cmd
อ็อบเจ็กต์ของคลาสนี้หรือคลาสย่อยให้เฟรมเวิร์กตัวแปลแบบบรรทัด เมธอดสำคัญของคลาสนี้ที่ถูกสืบทอดโดยคลาสย่อยมีดังนี้:
cmdloop()
เมธอดนี้ส่งอ็อบเจ็กต์เข้าสู่ลูป รับอินพุตและส่งต่อไปยังเมธอดจัดการคำสั่งที่เหมาะสมในคลาส
เมื่อลูปเริ่ม ข้อความแนะนำ (ให้เป็นพารามิเตอร์ของเมธอด cmdloop()) จะแสดงพร้อมพรอมต์เริ่มต้น (cmd) ซึ่งอาจปรับแต่งได้โดยแอตทริบิวต์ prompt
อ็อบเจ็กต์ตัวแปลรู้จักอินพุตของผู้ใช้ใน 2 ส่วน ส่วนแรกนำหน้าด้วย 'do_' ถูกจัดการเป็นเมธอดในคลาส และส่วนที่สองเป็นพารามิเตอร์ของเมธอด ตัวอย่างเช่น หากผู้ใช้ป้อน 'hello Python' ตัวแปลจะพยายามรันเมธอด do_hello() ในคลาสส่ง 'Python' เป็นพารามิเตอร์ หากเมธอดดังกล่าวถูกกำหนด มันจะถูกรัน มิฉะนั้นข้อความข้อผิดพลาดจะแสดง
คลาสย่อยของ Cmd สืบทอดเมธอด do_help() อินพุตของผู้ใช้ เช่น 'help hello' จะดึง docstring ในเมธอด hello() และแสดงเป็นข้อความ help หรือหากมี เมธอด help_hello() จะถูกรัน
ตัวอย่างต่อไปนี้สาธิตการประยุกต์ใช้เฟรมเวิร์กตัวแปลแบบบรรทัด โค้ดนำเข้าโมดูล cmd ก่อนและกำหนดคลาสย่อยของคลาส Cmd
คลาส MathOps กำหนดเมธอด add, sub, mul และ div (ทั้งหมดนำหน้าด้วย do_) พร้อมข้อความ docstring:
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 -> >>>