Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hỗ trợ trình thông dịch dòng lệnh hướng dòng trong Python (cmd)


Mô-đun cmd chỉ chứa một lớp gọi là Cmd. Lớp này được dùng làm lớp cơ sở cho khung do người dùng định nghĩa cho trình thông dịch dòng lệnh hướng dòng (line-oriented command interpreters).

Cmd

Một đối tượng của lớp này hoặc lớp con của nó cung cấp khung trình thông dịch hướng dòng. Các phương thức quan trọng của lớp này được kế thừa bởi lớp con được liệt kê dưới.

cmdloop()

Phương thức này gửi đối tượng vào một vòng lặp, chấp nhận đầu vào và gửi cùng đến phương thức xử lý lệnh thích hợp trong lớp.

Khi vòng lặp bắt đầu, một thông điệp giới thiệu (được đưa làm tham số cho phương thức cmdloop()) sẽ được hiển thị với dấu nhắc mặc định (cmd) có thể được tùy chỉnh bởi thuộc tính prompt.

Đối tượng trình thông dịch nhận diện đầu vào của người dùng thành hai phần. Phần đầu tiên có tiền tố do_ được coi như phương thức trong lớp và phần thứ hai làm tham số cho phương thức. Ví dụ nếu người dùng nhập hello Python, trình thông dịch cố gắng thực thi phương thức do_hello() trong lớp gửi Python làm tham số. Nếu phương thức nói trên được định nghĩa, nó sẽ được thực thi, nếu không thông báo lỗi sẽ được hiển thị.

Lớp con của Cmd kế thừa phương thức do_help(). Đầu vào của người dùng như help hello sẽ lấy docstring trong phương thức hello() và hiển thị nó như văn bản trợ giúp, hoặc nếu có, phương thức help_hello() sẽ được chạy.

Ví dụ sau minh họa ứng dụng của khung trình thông dịch hướng dòng. Mã trước nhập mô-đun cmd và định nghĩa một lớp con của lớp Cmd.

Lớp MathOps định nghĩa các phương thức add, sub, mul và div (tất cả có tiền tố do_) với văn bản docstring.

Đối tượng của lớp MathOps được khai báo và gửi vào vòng lặp bằng cách gọi phương thức cmdloop(). Khi người dùng gõ help trước dấu nhắc, tất cả tên phương thức được hiển thị. Khi tên phương thức với help được gõ, docstring của phương thức tương ứng được hiển thị. Để gọi bất kỳ phương thức nào, gõ tên nó, đối số cần thiết và nhấn Enter. Kết quả của phương thức sẽ được hiển thị và dấu nhắc sẽ quay lại lặp lại cho đến khi ^D được đưa ra để dừng vòng lặp.

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

Chạy mẫu của script trên được hiển thị dưới đây:

loop starts. Press ^D to exit
->help
Documented commands (type help <topic>):
========================================
add  div  help  mul  sub
Undocumented commands:
======================
EOF
->help add
add two numbers
->add 5 7
addition: 12
->div 10 5
division: 2.0
-> >>>