Cách tốt nhất để tạo giao diện dòng lệnh trong Python

Cách viết các chương trình Python trực quan, dễ sử dụng

Giao diện dòng lệnh (CLI):

Giao diện dòng lệnh hoặc trình thông dịch ngôn ngữ lệnh, còn được gọi là giao diện người dùng dòng lệnh, giao diện người dùng bảng điều khiển và giao diện người dùng ký tự, là phương tiện tương tác với chương trình máy tính nơi người dùng đưa ra lệnh cho chương trình dưới dạng dòng văn bản liên tiếp.

Bạn có thể làm cho chương trình của mình mạnh mẽ và tương tác bằng cách tạo giao diện dòng lệnh (CLI). CLI cho phép bạn tham gia vào các đối số dòng lệnh (thông tin theo sau tên chương trình trên dòng lệnh của hệ điều hành) để thêm các tính năng bổ sung vào chương trình của bạn, giúp mã của bạn dễ sử dụng và linh hoạt. Tùy thuộc vào chương trình, các đối số này có thể được sử dụng để thêm các tính năng bổ sung như xem tài liệu trợ giúp, chỉ định tệp đầu ra hoặc bật các tính năng kiểm tra có thể có lỗi để sử dụng bình thường.

Khi tôi lần đầu tiên bắt đầu lập trình bằng Python, tôi hầu như chỉ thu thập dữ liệu đầu vào của người dùng một cách tương tác như thế này:

def chính ():
    đầu tiên = đầu vào (nhập tên của bạn: tên)
    last = input (vào tên của bạn
    in (đầu tiên + '' + cuối)

Mặc dù mã này tốt cho các tập lệnh đơn giản, nhưng nó có vấn đề vì một vài lý do. Đối với người mới bắt đầu, mã này không linh hoạt. Khi người dùng chạy chương trình này, họ bị giới hạn chỉ một bộ quy tắc được xác định. Ví dụ, nếu thay vì in ra bàn điều khiển, tôi muốn đăng nhập đầu ra thành tệp văn bản thì sao? Là một người dùng mới, làm thế nào để tôi tìm ra cách chương trình hoạt động? Là một nhà phát triển, bạn có thể tạo giao diện dòng lệnh để đưa ra giải pháp cho những vấn đề này.

Những cân nhắc quan trọng

Khi tạo CLI, điều quan trọng là phải xem xét những điều sau đây:

  1. Đối số bắt buộc: Đối số nào là hoàn toàn cần thiết để chương trình chạy? Ví dụ: nếu tôi đang viết chương trình để quét trang web, một đối số bắt buộc có thể là tên miền Trang.
  2. Tài liệu: Điều quan trọng là viết ra chức năng của từng tùy chọn và đối số để người dùng mới có thể tìm ra cách chương trình của bạn hoạt động.
  3. Xử lý các trường hợp lỗi: Cho người dùng biết chính xác những gì đã sai và ở đâu
  4. Trạng thái thời gian chạy: Nếu tác vụ không hoàn thành ngay lập tức, bạn nên in tiến trình hiện tại

Đọc các đối số bằng cách sử dụng argparse

Argparse là một mô-đun thư viện chuẩn Python để phân tích cú pháp các đối số dòng lệnh. Bạn là lập trình viên có thể định nghĩa các đối số sẽ được thực hiện và argparse sẽ tìm ra cách phân tích chúng ra khỏi sys.argv (một danh sách trong Python, chứa các đối số dòng lệnh được truyền cho tập lệnh, tìm hiểu thêm tại đây). Argparse cũng tự động tạo thông báo trợ giúp và sử dụng và xuất ra lỗi khi người dùng đưa ra các đối số không hợp lệ của chương trình. Nó rất đơn giản để sử dụng và làm cho nó rất dễ dàng để viết CLI trực quan.

Để bắt đầu, hãy tạo một tệp mới có tên test_cli.py và nhập mô-đun và khởi tạo trình phân tích cú pháp mới:

nhập khẩu argparse
trình phân tích cú pháp = argparse.ArgumentParser ()
trình phân tích cú pháp.parse_args ()

Bây giờ hãy chạy mã với tùy chọn - help:

python3 test_cli.py - trợ giúp

Bạn sẽ nhận được một thông báo trợ giúp mặc định đẹp như thế này:

cách sử dụng: test_cli.py [-h]
đối số tùy chọn:
    -h, --hỗ trợ hiển thị thông báo trợ giúp này và thoát

Xin chúc mừng bạn vừa thực hiện giao diện dòng lệnh đầu tiên của bạn!

Bây giờ, hãy để thêm một thông điệp chào mừng để nhanh chóng cho người dùng của bạn biết chương trình làm gì:

welcome = "Thực hành tạo giao diện dòng lệnh tương tác"
trình phân tích cú pháp = argparse.ArgumentParser (description = welcome)
trình phân tích cú pháp.parse_args ()

Bây giờ chạy chương trình với cờ -h. Bạn sẽ có thể thấy thông điệp chào mừng ưa thích của bạn.

Bây giờ hãy để Lừa làm một cái gì đó hữu ích hơn.

Thêm đối số

Giả sử chúng tôi đang viết một chương trình để cạo một trang web. Một số đối số chúng tôi có thể cần là miền của trang web --domain hoặc -d, tùy chọn đăng nhập đầu ra vào một tệp ra --ofile hoặc -o và có lẽ là tùy chọn in một số dòng đầu ra cụ thể cho bảng điều khiển - dòng hoặc -l. Trong ví dụ này, chúng tôi sẽ đưa ra đối số miền cần thiết, trong khi đối số ofile và lines sẽ là tùy chọn.

Chúng ta có thể dễ dàng thêm các đối số bổ sung vào CLI đối số bằng cách sử dụng .add_argument sẽ cho phép chúng ta xác định chi tiết sử dụng. Chúng ta có thể thêm đối số bắt buộc --domain như vậy:

Parser.add_argument ('- domain', '-d', required = True, help = 'tên miền của trang web bạn muốn cạo. i.e.

Bây giờ hãy chạy chương trình với đối số -h để xem tài liệu bạn đã viết!

Vì --domain là một đối số bắt buộc, hãy thử chạy chương trình mà không có bất kỳ cờ nào và bạn sẽ được xử lý thông báo sau:

cách sử dụng: test_cli.py [-h] - tên miền DOMAIN
test_cli.py: error: các đối số sau là bắt buộc: --domain / -d

Nó hoạt động!

Thời gian để thêm các đối số bổ sung của chúng tôi bằng cách sử dụng argparse. Nếu bạn không chỉ định những đối số nào là bắt buộc, argparse sẽ cho rằng chúng là tùy chọn. Bạn cũng có thể đặt loại đối số, vì --lines chúng tôi sẽ lấy một số nguyên. Có nhiều tùy chọn hữu ích khác mà bạn có thể đặt cho .add_argument, chẳng hạn như action = - mà bạn có thể tìm hiểu thêm về tài liệu argparse chính thức tại đây.

Parser.add_argument ('- ofile', '-o', help = 'xác định tệp đầu ra để lưu kết quả của thiết bị xuất chuẩn. tức là "output.txt"')
Parser.add_argument ('- lines', '-l', help = 'số dòng đầu ra để in ra bàn điều khiển "', type = int)

Bây giờ hãy kiểm tra mã của bạn để đảm bảo mọi thứ đều hoạt động tốt. Một cách đơn giản để làm điều này là bằng cách lưu trữ các giá trị của các đối số dưới dạng các biến và sau đó in các giá trị này.

args = Parser.parse_args ()
tên miền = args.domain
ofile = args.ofile
dòng = args.lines
in ("tên miền:", tên miền)
in ("tập tin đầu ra:", ofile)
in ("dòng:", dòng)

Lưu ý: các đối số tùy chọn được lưu trữ là Không theo mặc định trong khi không sử dụng.

Đây là tất cả mã của tôi:

Cuối cùng

Mặc dù đây không phải là một hướng dẫn toàn diện, nhưng nó cũng đủ để bạn suy nghĩ về giao diện dòng lệnh và cải thiện trải nghiệm người dùng cho các tập lệnh của bạn. Rốt cuộc, những gì mà điểm của mã nếu không ai có thể sử dụng nó. Nếu bạn có thêm khuyến nghị, mẹo hoặc tài nguyên, vui lòng chia sẻ trong các nhận xét!

Cảm ơn vì đã đọc! Nếu bạn thích nó, hãy chắc chắn đập vỡ nút theo dõi đó :) Ngoài ra hãy chắc chắn kiểm tra trang web của tôi, Twitter, LinkedIn và Github.