Οδηγός Python Typer: Δημιουργία CLI με Python σε λίγα λεπτά
Μάθετε πώς να δημιουργείτε CLI με την Python χρησιμοποιώντας το Typer σε μερικά απλά βήματα.
Σε αυτό το σεμινάριο, θα δημιουργήσουμε μια διεπαφή γραμμής εντολών (CLI) χρησιμοποιώντας το Typer, μια βιβλιοθήκη Python που κάνει τη δημιουργία CLI γρήγορη και απλή. Το Typer αξιοποιεί επίσης τις υποδείξεις τύπου Python.
Αυτό το σεμινάριο θα σας καθοδηγήσει στο πώς να δημιουργήσετε ένα CLI για ένα πρόγραμμα παρακολούθησης. Συγκεκριμένα, θα μάθουμε πώς να:
- Ρυθμίστε το Typer
- Προσθήκη εντολών
- Χειριστείτε σωστά την εργασία, τον χρόνο και την προτεραιότητα—εισόδους και τύπους δεδομένων
Ας ξεκινήσουμε!
Βήμα 1: Εγκαταστήστε το Typer
Αρχικά, ας εγκαταστήσουμε το Typer:
$ pip3 install typer
Η εγκατάσταση του Typer εγκαθιστά αυτόματα όλες τις απαιτούμενες εξαρτήσεις, γεγονός που διευκολύνει τη λειτουργικότητα της διεπαφής γραμμής εντολών. Εγκαταστήστε το Typer σε εικονικό περιβάλλον για το έργο.
Εδώ είναι το αποθετήριο GitHub για αυτό το απλό έργο.
Βήμα 2: Δημιουργήστε το Basic CLI
Ας ξεκινήσουμε δημιουργώντας ένα απλό CLI που μπορεί να προσθέσει μια εργασία σε ένα χρονοδιάγραμμα με τη σωστή μορφή ώρας.
Δημιουργήστε ένα αρχείο Python με το όνομα schedule_tracker.py
.
Εισαγάγετε τις απαιτούμενες βιβλιοθήκες και ενότητες. Η παρουσία typer.Typer()
(app
) διαχειρίζεται τις εντολές CLI.
import typer
from datetime import datetime
import json
from typing import List
app = typer.Typer()
Ορίζουμε μερικές βοηθητικές συναρτήσεις για να φορτώσετε το χρονοδιάγραμμα και να το αποθηκεύσετε σε ένα αρχείο JSON:
SCHEDULE_FILE = "schedule.json"
def load_schedule() -> List[dict]:
try:
with open(SCHEDULE_FILE, "r") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return []
def save_schedule(schedule: List[dict]):
with open(SCHEDULE_FILE, "w") as f:
json.dump(schedule, f, default=str, indent=4)
Επειδή έχουμε έναν χρόνο που σχετίζεται με κάθε εργασία, ας δημιουργήσουμε μια βοηθητική συνάρτηση που αναλύει τη συμβολοσειρά σε ένα έγκυρο αντικείμενο χρόνου:
def parse_time(t: str) -> datetime.time:
try:
return datetime.strptime(t, "%H:%M").time()
except ValueError:
typer.echo("Invalid time format. Please use HH:MM.")
raise typer.Exit()
Δημιουργήστε τη βασική εντολή add_task
. Η εργασία (μια περιγραφή της εργασίας), ο χρόνος και η προτεραιότητα ορίζουν κάθε στοιχείο εργασίας:
@app.command()
def add_task(
task: str,
time: str = typer.Option(..., help="Time in HH:MM format"),
priority: int = typer.Option(1, help="Priority of the task")
):
schedule = load_schedule()
task_time = parse_time(time)
schedule.append({"task": task, "time": task_time.strftime("%H:%M"), "priority": priority})
save_schedule(schedule)
typer.echo(f"Task '{task}' added at {task_time.strftime('%H:%M')} with priority {priority}")
if __name__ == "__main__":
app()
Βήμα 3: Εκτελέστε το CLI
Τώρα εκτελέστε το schedule_tracker.py
για να προσθέσετε εργασίες όπως αυτή:
$ python3 schedule_tracker.py add-task "Team meeting" --time "14:00" --priority 2
Ποιες εξόδους:
Task 'Team meeting' added at 14:00 with priority 2
Τώρα έχετε ένα λειτουργικό CLI που δέχεται εργασίες με σχετικό χρόνο και προτεραιότητα!
Βήμα 4: Προσθέστε περισσότερες εντολές
Ας προσθέσουμε περισσότερη λειτουργικότητα στην παρακολούθηση χρονοδιαγράμματος, όπως η προβολή και η κατάργηση εργασιών.
Αρχικά, προσθέστε μια εντολή για να δείτε τις εργασίες ταξινομημένες κατά χρόνο:
@app.command()
def list_tasks():
"""List all scheduled tasks."""
schedule = load_schedule()
if not schedule:
typer.echo("No tasks found.")
return
for task in sorted(schedule, key=lambda x: x["time"]):
@app.command()
print(f"Task {i}: {task['task']}")
print(f" Time: {task['time']}")
print(f" Priority: {task['priority']}")
print("-" * 40) # Add a separator line for better readability
Μπορείτε να τροποποιήσετε αυτήν τη λειτουργία όπως απαιτείται για να ταξινομήσετε τις εργασίες κατά προτεραιότητα επίσης.
Ας προσθέσουμε επίσης μια εντολή για την κατάργηση εργασιών με βάση τον αριθμό ευρετηρίου τους:
@appcommand()
def remove_task(task_number: int):
"""Remove a task by its number."""
schedule = load_schedule()
if 0 < task_number <= len(schedule):
removed_task = schedule.pop(task_number - 1)
save_schedule(schedule) # Save the updated schedule
typer.echo(f"Removed task '{removed_task['task']}' scheduled at {removed_task['time']}")
else:
typer.echo(f"Invalid task number. Choose a number between 1 and {len(schedule)}.")
Βήμα 5: Δοκιμάστε το Βελτιωμένο CLI
Τώρα, δοκιμάστε τις ακόλουθες εντολές.
Προσθήκη πολλαπλών εργασιών:
$ python3 schedule_tracker.py add-task "Code review" --time "10:30" --priority 1
$ python3 schedule_tracker.py add-task "Client meeting" --time "12:00" --priority 3
Κάνοντας αυτό, θα δείτε:
Task 'Code review' added at 10:30 with priority 1
Task 'Client meeting' added at 12:00 with priority 3
Προβολή όλων των εργασιών:
$ python3 schedule_tracker.py list-tasks
Η εκτέλεση αυτής της εντολής βγάζει:
Task 0: Code review
Time: 10:30
Priority: 1
----------------------------------------
Task 1: Client meeting
Time: 12:00
Priority: 3
----------------------------------------
Task 2: Team meeting
Time: 14:00
Priority: 2
----------------------------------------
Κατάργηση εργασίας:
$ python3 schedule_tracker.py remove-task 1
Αυτό βγάζει:
Removed task 'Team meeting' scheduled at 14:00
Δείτε την ενημερωμένη λίστα εργασιών:
$ python3 schedule_tracker.py list-tasks
Θα πρέπει τώρα να δούμε την ακόλουθη έξοδο:
Task 0: Code review
Time: 10:30
Priority: 1
----------------------------------------
Task 1: Client meeting
Time: 12:00
Priority: 3
----------------------------------------
Αναδίπλωση
Αυτό είναι όλο για αυτό το σεμινάριο. Όπως φαίνεται, με το Typer, μπορείτε να δημιουργήσετε απλά αλλά ισχυρά CLI μέσα σε λίγα λεπτά. Σε αυτό το σεμινάριο, δημιουργήσαμε έναν ανιχνευτή χρονοδιαγράμματος που χειρίζεται αποτελεσματικά τις εργασίες και την επικύρωση εισαγωγής χρόνου.
Τώρα μπορείτε να βελτιώσετε την έκδοση που δημιουργήσαμε. Μπορείτε να επεκτείνετε αυτό το έργο προσθέτοντας περισσότερες δυνατότητες, όπως επαναλαμβανόμενες εργασίες, υπενθυμίσεις ή εξαγωγή του χρονοδιαγράμματος. Ή μπορείτε να δοκιμάσετε να δημιουργήσετε μια παρόμοια εφαρμογή για την παρακολούθηση δαπανών.
Καλή κωδικοποίηση!