Bạn viết một script hữu ích và muốn đồng nghiệp dùng được. Thay vì bắt họ sửa biến trong file, hãy biến nó thành lệnh CLI. Typer làm việc đó chỉ từ type hints.
Cài đặt và ví dụ đầu tiên
pip install typer
# chao.py
import typer
def main(ten: str, lan: int = 1, hoa: bool = False):
# Gửi lời chào.
loi = f"Xin chào {ten}!"
if hoa:
loi = loi.upper()
for _ in range(lan):
print(loi)
if __name__ == "__main__":
typer.run(main)
python chao.py An --lan 3 --hoa
python chao.py --help
Typer đọc type hints để tự sinh tham số, kiểm tra kiểu và viết luôn màn hình --help. Truyền --lan abc sẽ bị báo lỗi rõ ràng thay vì gây crash.
Nhiều lệnh con
import typer
app = typer.Typer(help="Công cụ quản lý người dùng")
@app.command()
def them(ten: str, email: str):
# Thêm người dùng mới.
print(f"Đã thêm {ten} <{email}>")
@app.command()
def xoa(ten: str, xac_nhan: bool = typer.Option(False, "--yes", "-y")):
# Xóa người dùng.
if not xac_nhan:
xac_nhan = typer.confirm(f"Xóa {ten}?")
if xac_nhan:
print(f"Đã xóa {ten}")
if __name__ == "__main__":
app()
python quanly.py them An [email protected]
python quanly.py xoa An -y
Mô tả và ràng buộc cho tham số
from pathlib import Path
@app.command()
def nhap(
tep: Path = typer.Argument(..., exists=True, help="File CSV đầu vào"),
gioi_han: int = typer.Option(100, "--limit", "-l", min=1, max=10000),
):
print(f"Đọc {tep}, tối đa {gioi_han} dòng")
Typer tự kiểm tra file có tồn tại và giá trị có nằm trong khoảng cho phép.
Màu sắc và thanh tiến trình
import typer
typer.secho("Thành công!", fg=typer.colors.GREEN, bold=True)
typer.secho("Cảnh báo", fg=typer.colors.YELLOW)
with typer.progressbar(range(100), label="Đang xử lý") as thanh:
for i in thanh:
...
Đóng gói thành lệnh cài được
# pyproject.toml
[project.scripts]
quanly = "quanly:app"
Sau pip install ., người dùng gõ thẳng quanly them An [email protected] ở bất kỳ đâu. Nếu chỉ cần thứ tối giản và không muốn thêm phụ thuộc, argparse trong thư viện chuẩn vẫn là lựa chọn tốt.
