Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

รองรับตัวแปลคำสั่งเชิงบรรทัดใน Python


โมดูล cmd มีเพียงหนึ่งคลาสที่เรียกว่า Cmd ใช้เป็นคลาสพื้นฐานสำหรับเฟรมเวิร์กที่ผู้ใช้กำหนดสำหรับล่ามบรรทัดคำสั่งเชิงบรรทัด

คำสั่ง

อ็อบเจ็กต์ของคลาสนี้หรือคลาสย่อยของคลาสนี้จัดเตรียมเฟรมเวิร์กสำหรับล่ามตามบรรทัด วิธีการสำคัญของคลาสนี้ที่สืบทอดโดยคลาสย่อยมีดังต่อไปนี้

cmdloop()

เมธอดนี้ส่งอ็อบเจ็กต์แบบวนซ้ำ รับอินพุต และส่งแบบเดียวกันไปยังเมธอดตัวจัดการคำสั่งที่เหมาะสมในคลาส

เมื่อการวนซ้ำเริ่มต้น ข้อความแนะนำ (กำหนดให้เป็นพารามิเตอร์สำหรับเมธอด cmdloop()) จะแสดงขึ้นพร้อมกับพรอมต์เริ่มต้น (cmd) ซึ่งอาจปรับแต่งโดยแอตทริบิวต์พรอมต์

วัตถุล่ามรู้จักการป้อนข้อมูลของผู้ใช้ในสองส่วน ส่วนแรกนำหน้าด้วย 'do_' ถือเป็นเมธอดในคลาสและส่วนที่สองเป็นพารามิเตอร์ของเมธอด ตัวอย่างเช่น หากผู้ใช้ป้อน 'hello Python' ล่ามจะพยายามรันเมธอด do_hello() ในคลาสที่ส่ง 'Python' เป็นพารามิเตอร์ หากมีการกำหนดวิธีการดังกล่าว จะดำเนินการ มิฉะนั้น ข้อความแสดงข้อผิดพลาดจะแสดงขึ้น

คลาสย่อยของ Cmd สืบทอดเมธอด do_help() อินพุตของผู้ใช้ เช่น 'help hello' จะดึง docstring ในเมธอด hello() และแสดงเป็นข้อความช่วยเหลือ หรือหากมีเมธอด help_hello() จะถูกเรียกใช้

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประยุกต์ใช้กรอบงานล่ามเชิงบรรทัด รหัสจะนำเข้าโมดูล cmd ก่อนและกำหนดคลาสย่อยของคลาส Cmd

คลาส MathOps กำหนดวิธีการ add, sub, mul และ div (ทั้งหมดนำหน้าด้วยอักขระ do_) ด้วยข้อความ docstring

วัตถุของคลาส MathOps ถูกประกาศและส่งไปยังลูปโดยเรียกเมธอด cmdloop() เมื่อผู้ใช้พิมพ์ช่วยเหลือหน้าพรอมต์ ชื่อเมธอดทั้งหมดจะแสดงขึ้น เมื่อพิมพ์ชื่อของเมธอดด้วยความช่วยเหลือ docstring ของเมธอดนั้นจะแสดงขึ้น หากต้องการเรียกใช้เมธอดใดๆ ให้พิมพ์ชื่อ อาร์กิวเมนต์ที่ต้องการ แล้วกด 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
->
>>>