Phát Triển Ứng Dụng CLI Đầu Tiên Bằng Python

Bạn Đã Biết Gì Về Terminal và CLI? 🤔

Bạn có bao giờ thấy các hacker trong phim truyền hình gõ những dòng lệnh phức tạp trên màn hình, trông như đang kiểm soát cả thế giới chưa? 😎 Những cửa sổ kỳ bí đó chính là terminal (màn hình dòng lệnh), và các lệnh họ chạy là CLI (Command Line Interface - Giao diện dòng lệnh).

Một ứng dụng CLI thực chất là một chương trình có thể chạy trong terminal, cho phép bạn thực hiện nhiều tác vụ khác nhau như quản lý file, khởi động server, hoặc thậm chí tính toán. Hôm nay, chúng ta sẽ cùng viết một máy tính CLI đơn giản nhưng rất hữu ích bằng Python để bước vào thế giới CLI! 🚀

Cấu Trúc Cơ Bản Của Ứng Dụng CLI

Để hiểu rõ hơn về CLI, hãy nắm vững một số khái niệm cơ bản:

  • Lệnh (Command): Các câu lệnh bạn nhập vào terminal, ví dụ git, ls, python.
  • Lệnh Phụ (Subcommand): Một số lệnh có thể có các lệnh phụ, như commit trong git commit.
  • Tham Số (Arguments): Thông tin bổ sung do người dùng cung cấp, như "Thông điệp" trong git commit -m "Thông điệp".
  • Tùy chọn (Options/Flags): Điều chỉnh hành vi của lệnh, như -m trong git commit.

Chúng ta sẽ xây dựng một máy tính CLI hỗ trợ bốn phép toán: cộng, trừ, nhân, chia, với tham số từ dòng lệnh! 📊

Cấu Trúc Dự Án: Tổ Chức Tệp Tin Như Thế Nào? 📁

Trước khi bắt đầu viết mã, hãy xác định cấu trúc dự án để mã dễ đọc và bảo trì hơn.

maytinh_cli/
├── maytinh_cli/
│   ├── tinhtoan.py  # Lõi logic của máy tính
│   ├── __init__.py  # Để Python coi thư mục này là module
│   └── __main__.py  # Điểm vào của ứng dụng CLI
├── README.md        # Giới thiệu dự án
├── requirements.txt # Danh sách thư viện cần thiết
└── setup.py         # Cấu hình đóng gói và cài đặt

Trong đó:

  • tinhtoan.py: Logic chính (cộng, trừ, nhân, chia).
  • __main__.py: Xử lý đầu vào, phân tích tham số dòng lệnh, gọi hàm từ tinhtoan.py.
  • requirements.txt: Liệt kê thư viện cần thiết.
  • setup.py: Hỗ trợ cài đặt qua pip install.

Viết Logic Máy Tính (tinhtoan.py) 📖

Đầu tiên, chúng ta viết lớp MayTinh để chứa logic cộng trừ nhân chia.

class MayTinh:
    """Máy tính CLI đơn giản"""

    def cong(self, a, b):
        """Cộng hai số"""
        return a + b

    def tru(self, a, b):
        """Trừ hai số"""
        return a - b

    def nhan(self, a, b):
        """Nhân hai số"""
        return a * b

    def chia(self, a, b):
        """Chia hai số (kiểm tra không chia cho 0)"""
        if b == 0:
            raise ValueError("Lỗi: Không được chia cho 0!")
        return a / b

Giải thích:

  • Lớp MayTinh định nghĩa các phương thức cong(), tru(), nhan(), chia() xử lý từng phép toán.
  • Phương thức chia() có thêm kiểm tra lỗi, nếu chia cho 0 thì báo lỗi.

Sử Dụng Argparse Để Phân Tích Tham Số (main.py) 🖥

Bây giờ, viết phần lõi của CLI sử dụng mô-đun argparse để phân tích tham số dòng lệnh.

import argparse
from maytinh_cli.tinhtoan import MayTinh

def main():
    """Điểm vào CLI"""
    maytinh = MayTinh()

    parser = argparse.ArgumentParser(prog="machinhtoan", description="Máy tính CLI đơn giản", epilog="Ví dụ: machinhtoan cong 1 2")
    subparsers = parser.add_subparsers(title="Toán tử", dest="toan_tu", required=True)

    for op in ["cong", "tru", "nhan", "chia"]:
        sub_parser = subparsers.add_parser(op, help=f"{op} hai số")
        sub_parser.add_argument("a", type=float, help="Số thứ nhất")
        sub_parser.add_argument("b", type=float, help="Số thứ hai")
        sub_parser.add_argument("-d","--dochinhxat", type=int, default=2, help="Số chữ số sau dấu phẩy")

    args = parser.parse_args()
    print(args)
    if args.toan_tu:
        try:
            pheptoan = getattr(maytinh, args.toan_tu)
            ketqua = round(pheptoan(args.a, args.b), args.dochinhxat)
            print(f"Kết quả: {ketqua}")
        except ValueError as e:
            print(f"Lỗi: {e}")
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

Giải thích:

  • ArgumentParser(): Tạo bộ phân tích dòng lệnh.
  • add_subparsers(): Tạo bộ phân tích lệnh con.
  • getattr(maytinh, args.toan_tu): Gọi phương thức tương ứng từ lớp MayTinh.
  • round(ketqua, args.dochinhxat): Làm tròn kết quả theo độ chính xác.

Cài Đặt Và Chạy Công Cụ CLI

  1. Tạo requirements.txt (liệt kê thư viện cần thiết):
setuptools
  1. Tạo setup.py (cho phép cài đặt công cụ CLI):
from setuptools import setup

setup(
    name="machinhtoan",
    version="1.0",
    packages=["maytinh_cli"],
    entry_points={
        "console_scripts": ["machinhtoan = maytinh_cli.__main__:main"],
    },
    description="Máy tính CLI đơn giản bằng Python",
    python_requires=">=3.6",
)
  1. Cài đặt công cụ CLI:
pip install -e .

Giải thích:

  • pip install -e .: Cài đặt ở chế độ editable mode, tức là sửa mã nguồn trực tiếp mà không cần cài lại.
  1. Chạy máy tính CLI:
machinhtoan cong 6 9
machinhtoan chia 6 9 -d 5

Thẻ: python CLI argparse setuptools

Đăng vào ngày 16 tháng 7 lúc 06:10