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

การรองรับตัวแปลคำสั่งแบบบรรทัดใน Python (cmd)

โมดูล 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
-> 
>>>