Μικρό ασφαλές πρόγραμμα γραμμής εντολών — DedSec Project
Συνταγή: διεπαφή εντολών με συγκεκριμένα ορίσματα Πότε χρησιμοποιείται και τι πρέπει να επιτύχει Ένα μικρό εργαλείο σημειώσεων δέχεται --category με ακριβώς δύο επιτρεπτές τιμές και --limit…
Συνταγή: διεπαφή εντολών με συγκεκριμένα ορίσματα
Πότε χρησιμοποιείται και τι πρέπει να επιτύχει
Ένα μικρό εργαλείο σημειώσεων δέχεται --category με ακριβώς δύο επιτρεπτές τιμές και --limit από 1 έως 100. Όταν η συνάρτηση λαμβάνει ρητά μία λίστα ορισμάτων, μπορείς να τη δοκιμάζεις χωρίς να επηρεάζονται τα ορίσματα της διεργασίας που εκτελεί τα τεστ. Ελλείπουσα υποχρεωτική επιλογή, άγνωστη κατηγορία ή όριο εκτός εύρους πρέπει να παράγουν τον συνηθισμένο κωδικό εξόδου 2 της argparse.
Πλήρες εκτελέσιμο παράδειγμα
Αποθήκευσε ως 03_CLI.py και εκτέλεσε με Python 3. Χρησιμοποιούνται προσωρινά δεδομένα και δεν απαιτείται δίκτυο.
import argparse
def positive(text):
value = int(text)
if not 1 <= value <= 100:
raise argparse.ArgumentTypeError("limit must be 1..100")
return value
def parser():
p = argparse.ArgumentParser(prog="notes")
p.add_argument("--limit", type=positive, default=10)
p.add_argument("--category", choices=("code", "ideas"), required=True)
return p
def selection(argv):
args = parser().parse_args(argv)
return {"limit": args.limit, "category": args.category}
assert selection(["--category", "code"]) == {"limit":10,"category":"code"}
assert selection(["--category", "ideas","--limit","100"])["limit"] == 100
for bad in (["--category","nope"],["--category","code","--limit","0"],
["--limit","5"],["--category","code","--limit","101"]):
try: selection(bad)
except SystemExit as exc:
assert exc.code == 2
else: raise AssertionError("bad CLI accepted")
print("PASS bounded CLI parsing")
Εγγυήσεις και περιορισμοί
Όρισε τον αναλυτή σε ξεχωριστή συνάρτηση και κράτησε την επικύρωση μακριά από ενέργειες ανάγνωσης αρχείων ή βάσης. Η choices ελέγχει την επιτρεπόμενη κατηγορία και μία συνάρτηση τύπου επιβάλλει το αριθμητικό διάστημα. Στο συγκεκριμένο συμβόλαιο, άκυρη είσοδος τερματίζει καθαρά αντί να αντικαθίσταται σιωπηλά με προεπιλογές. Μία εφαρμογή με γραφικό περιβάλλον μπορεί να μετατρέψει το σφάλμα σε μήνυμα χρήστη.
Εργαστήριο προσαρμογής
Πρόσθεσε --format με επιλογές json και text και έλεγξε προεπιλογές και λανθασμένες τιμές. Δοκίμασε python -m compileall και σύγκρινε ελέγχους parse_args με πραγματική εκτέλεση στο τερματικό. Πρόσθεσε κατηγορία με ελληνικό όνομα μόνο αφού αλλάξεις συνειδητά την προδιαγραφή των επιτρεπόμενων τιμών.
Αντιμετώπιση προβλημάτων
Στο Termux έλεγξε έκδοση Python και τον τρόπο που το κέλυφος διατηρεί τα εισαγωγικά σε ορίσματα με κενά. Στις κλήσεις subprocess πέρασε λίστα ορισμάτων, όχι μία συμβολοσειρά εντολής. Ο κωδικός εξόδου 2 δείχνει συνήθως πρόβλημα εισόδου, όχι αποτυχία εξωτερικής υπηρεσίας.