Computer >> Máy Tính >  >> Lập trình >> Python

Lập trình giao diện dòng lệnh trong Python?

Trong phần này, chúng ta sẽ phát triển một giao diện dòng lệnh bằng python. Nhưng trước khi đi sâu vào chương trình, trước tiên chúng ta hãy hiểu về dòng lệnh.

Dòng lệnh được sử dụng từ khi có các chương trình máy tính và được xây dựng dựa trên các lệnh. Chương trình dòng lệnh là chương trình chạy từ trình bao hoặc từ dòng lệnh

Trong khi giao diện dòng lệnh cung cấp giao diện người dùng được điều hướng bằng cách nhập lệnh tại thiết bị đầu cuối, trình bao hoặc bảng điều khiển thay vì sử dụng chuột.

Giao diện dòng lệnh (CLI) bắt đầu với một tệp thực thi. Có những tham số mà chúng ta có thể chuyển vào script tùy thuộc vào cách chúng được phát triển, chẳng hạn như:

  • Đối số :Chúng tôi cần cung cấp tham số này được truyền cho tập lệnh. Trong trường hợp chúng tôi không cung cấp, CLI sẽ thông báo lỗi. Ví dụ:numpy là đối số trong lệnh này:pip installnumpy.

  • Tùy chọn :Một tham số tùy chọn đi kèm với tên và một cặp giá trị như:pip install django –cache-dir ./my-cache-dir trong đó –cache_dir là một tham số tùy chọn và giá trị ./my-cache-dir phải được sử dụng như thư mục bộ nhớ cache.

  • Cờ :Một tham số tùy chọn khác yêu cầu tập lệnh bật hoặc tắt một hành vi nhất định, chẳng hạn như tham số –help.

Python cung cấp nhiều gói python để viết giao diện dòng lệnh chẳng hạn như ‘click’. Click cho phép chúng tôi xây dựng giao diện dòng lệnh với một vài dòng mã.

Dưới đây là một chương trình giao diện dòng lệnh mà không cần sử dụng gói nhấp chuột. Việc viết chương trình CLI có thể không trang nhã như chương trình chúng tôi sử dụng gói ‘nhấp chuột’, vì ‘nhấp chuột’ cho phép bạn tuân theo nguyên tắc “Không lặp lại chính mình” (DRY).

Giao diện dòng lệnh mà không sử dụng gói nhấp chuột

import sys
import random

def do_work():
   """ Function to handle command line usage"""
   args = sys.argv
   args = args[1:] # First element of args is the file name

   if len(args) == 0:
      print('You have not passed any commands in!')
   else:
      for a in args:
         if a == '--help':
            print('Basic command line program')
            print('Options:')
            print(' --help -> show this basic help menu.')
            print(' --monty -> show a Monty Python quote.')
            print(' --veg -> show a random vegetable')
         elif a == '--monty':
            print('He’s not the Messiah—he’s a very naughty boy')
         elif a == '--veg':
            print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip']))
         else:
            print('Unrecognised argument.')

if __name__ == '__main__':
do_work()

Đầu ra

c:\Python\Python361>python cli_interp1.py --monty
He’s not the Messiah—he’s a very naughty boy

c:\Python\Python361>python cli_interp1.py --help
Basic command line program
Options:
--help -> show this basic help menu.
--monty -> show a Monty Python quote.
--veg -> show a random vegetable

c:\Python\Python361>python cli_interp1.py --veg
Tomato

c:\Python\Python361>python cli_interp1.py --error
Unrecognised argument.

Như bạn có thể thấy trong chương trình trên, nó không cung cấp nhiều tính linh hoạt để thay đổi tên đối số.

Dưới đây là chương trình tương tự sử dụng gói nhấp chuột python để triển khai CLI.

import click
import random

@click.command()
@click.option('--monty', default=False, help='Show a Monty Python quote.')
@click.option('--veg', default=False, help='Show a random vegetable.')
def do_work(monty, veg):
""" Basic Click example will follow your commands"""
if monty:
   print('He’s not the Messiah—he’s a very naughty boy')
   if veg:
      print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip']))
if __name__ == '__main__':
do_work()

Đầu ra

c:\Python\Python361>python cli_interp2.py --help
Usage: cli_interp2.py [OPTIONS]

Basic Click example will follow your commands

Options:
--monty TEXT Show a Monty Python quote.
--veg TEXT Show a random vegetable.
--help Show this message and exit.

Chương trình trên cho thấy, việc viết CLI bằng cách sử dụng gói "click" dễ dàng hơn nhiều và tiết kiệm rất nhiều nỗ lực của lập trình viên.