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ư
committronggit commit. - Tham Số (Arguments): Thông tin bổ sung do người dùng cung cấp, như
"Thông điệp"tronggit commit -m "Thông điệp". - Tùy chọn (Options/Flags): Điều chỉnh hành vi của lệnh, như
-mtronggit 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 quapip 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ứccong(),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ớpMayTinh.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
- Tạo
requirements.txt(liệt kê thư viện cần thiết):
setuptools
- 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",
)
- 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.
- Chạy máy tính CLI:
machinhtoan cong 6 9
machinhtoan chia 6 9 -d 5