אם פיתחת סקריפט או יישום של פייתון שנועדו להריץ בעיקר באמולטורים מסופים או אפילו ביישומי GUI, הוספת ארגומנטים של שורת פקודה יכולה לשפר את השימושיות, הקריאות של הקוד, מבנה היישומים וידידות המשתמשים הכוללת של היישום למשתמשי הקצה. ארגומנטים אלה של שורת הפקודה נקראים גם אפשרויות או מתגים ועובדים בדומה לארגומנטים שאתה בדרך כלל רואה בתסריטים bash ובתוכניות אחרות המבוססות על C / C ++.
כדי להוסיף ארגומנטים לסקריפטים של פייתון, יהיה עליך להשתמש במודול מובנה בשם argparse. כפי שהשם מרמז, הוא מנתח ארגומנטים של שורת פקודה המשמשים בעת הפעלת סקריפט או יישום Python. הארגומנטים המנותקים האלה נבדקים גם על ידי המודול argparse כדי לוודא שהם מסוגם הנכון. טעויות עולות אם יש ערכים לא חוקיים בארגומנטים.
ניתן להבין את השימוש במודול הארגפרס בצורה הטובה ביותר באמצעות דוגמאות. להלן כמה דוגמאות קוד שיעזרו לך להתחיל עם המודול argparse.
דוגמה 1: צור עזרה והודעת עזרה
שקול את דוגמת הקוד להלן:
יְבוּאארגפרס
מנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
טוען= מנתח.parse_args()
ההצהרה הראשונה מייבאת את מודול הארגפרס. לאחר מכן, נוצר מופע חדש של אובייקט ArgumentParser ותיאור קצר של התוכנית מסופק כארגומנט. יש צורך באובייקט ArgumentParser כדי להמיר ערכי ארגומנט של שורת הפקודה לסוגי נתונים המובנים על ידי פייתון. הדבר נעשה בשיטת parse_args של אובייקט ArgumentParser, כפי שמוצג בהצהרה האחרונה.
בהנחה ששמרת את דוגמת הקוד המפורטת לעיל בקובץ בשם test.py, הפעלת הפקודות להלן תקבל לך הודעות עזרה הקשורות לתוכנית.
$ ./מִבְחָן.py-ה$ ./מִבְחָן.py-עֶזרָה
אתה אמור לקבל פלט דומה לזה:
שימוש: test.py [-h]
תוכנית בדיקה.
טיעונים אופציונליים:
-h, -עזור להציג את הודעת העזרה הזו ולצאת
שים לב כי לדוגמת הקוד שהוזכרה לא נוספה שום היגיון לטיפול בטיעונים מנתחים והמרתם לאובייקטים. לפיכך, הודעות עזרה עבור ארגומנטים בודדים אינן מוצגות בפלט. לאחר שתוסיף לוגיקה לטיפול בערכים של ארגומנטים מנותחים בתוכנית שלך, הודעות עזרה יתחילו להציג תיאור של ארגומנטים בודדים.
דוגמה 2: טיפול בוויכוח מחרוזת
כדי להוסיף ארגומנטים המקובלים על ידי סקריפט הפיתון שלך, עליך להשתמש בשיטת add_argument. תסתכל על הקוד הבא:
יְבוּאארגפרסמנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
מנתח.add_argument('print_string', עֶזרָה='מדפיס את הארגומנט שסופק.')
טוען= מנתח.parse_args()
הדפס(טוען.מחרוזת הדפסה)
נוספה הצהרה חדשה המציגה שימוש בשיטת add_argument. כל ארגומנט שנוסף בעת הפעלת הסקריפט יטופל כאובייקט print_string על ידי ArgumentParser.
שים לב כי כברירת מחדל, שיטת add_argument מתייחסת לערכים שאוחזרו מארגומנטים כמחרוזות, כך שלא תצטרך לציין במפורש את הסוג במקרה זה. ערך ברירת מחדל של None מוקצה גם לארגומנטים נוספים, אלא אם הם מבוטלים.
שוב תסתכל על הודעת העזרה:
שימוש: test.py [-h] [print_string]תוכנית מבחנים.
טיעונים עמדתיים:
print_string מדפיס את הארגומנט שסופק.
טיעונים אופציונליים:
-h, -עזור להציג את הודעת העזרה הזו ולצאת
אחד השורות בתפוקה אומר טיעונים פוזיציונליים. מכיוון שלא מוגדרת מילת מפתח לוויכוח, נכון לעכשיו מטפלים בטיעון כטענת מיקום כאשר לסדר ולמיקום של הארגומנט המסופק יש השפעה ישירה על התוכנית. טיעוני מיקום הם גם חובה, אלא אם כן תשנה את התנהגותם באופן ידני.
כדי להגדיר ולנתח ארגומנטים אופציונליים, תוכל להשתמש ב- - (מקף כפול) ולשנות את ערכי ברירת המחדל שלהם באמצעות ארגומנט ברירת המחדל.
יְבוּאארגפרסמנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
מנתח.add_argument('--print_string', עֶזרָה='מדפיס את הארגומנט שסופק.',בְּרִירַת מֶחדָל=לאַקרַאִי חוּט.)
טוען= מנתח.parse_args()
הדפס(טוען.מחרוזת הדפסה)
כעת כאשר אתה מריץ סקריפט test.py ללא כל טיעון, אתה אמור לקבל מחרוזת אקראית. כתפוקה. תוכל גם להשתמש במילת המפתח –print_string כדי להדפיס כל מחרוזת לבחירתך.
$ ./מִבְחָן.py--print_string LinuxHint.עםLinuxHint.comשים לב שאתה יכול להפוך ארגומנט אופציונלי לחובה על ידי שימוש בארגומנט נוסף = True.
לבסוף, באפשרותך גם להגדיר גרסאות קצרות של הטיעון באמצעות - (מקף יחיד) כדי להפחית את המילוליות.
יְבוּאארגפרסמנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
מנתח.add_argument(-p, '--print_string', עֶזרָה='מדפיס את הארגומנט שסופק.',בְּרִירַת מֶחדָל=לאַקרַאִי חוּט.)
טוען= מנתח.parse_args()
הדפס(טוען.מחרוזת הדפסה)
הפעלת הפקודה הבאה אמורה לתת לך את אותה התוצאה שלמעלה:
$ ./מִבְחָן.py-p LinuxHint.עםדוגמה 3: לטפל בוויכוח של מספר שלם
כדי לטפל בארגומנטים הזקוקים לערכי מספר שלם, עליך להגדיר את מילת המפתח מסוג int כדי לאפשר אימות ושגיאות לזרוק במקרה שהתנאי לא מתקיים.
יְבוּאארגפרסמנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
מנתח.add_argument('-p', '--print_string', עֶזרָה='מדפיס את הארגומנט שסופק.', סוּג=int)
טוען= מנתח.parse_args()
הדפס(טוען.מחרוזת הדפסה)
נסה להריץ את הפקודה הבאה:
$ ./מִבְחָן.py-p LinuxHint.עםאתה אמור לקבל שגיאה כזו:
שימוש: test.py [-h] [-p PRINT_STRING]test.py: error: argument -p/-print_string: ערך int לא חוקי: 'LinuxHint.com'
הזנת ערך שלם תיתן לך תוצאה נכונה:
$ ./מִבְחָן.py-p10001000דוגמה 4: התמודדות עם החלפות אמת ושקר
אתה יכול להעביר ארגומנטים ללא כל ערכים כדי להתייחס אליהם כדגלי אמת ושקר באמצעות ארגומנט הפעולה.
יְבוּאארגפרסמנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
מנתח.add_argument('-p', '--print_string', עֶזרָה='מדפיס את הארגומנט שסופק.',פעולה='store_true')
טוען= מנתח.parse_args()
הדפס(טוען.מחרוזת הדפסה)
הפעל את הפקודה למטה כדי לקבל אמת פשוטה בתור הפלט:
$ ./מִבְחָן.py-pאם אתה מריץ את הסקריפט ללא הארגומנט -p, במקום זאת יוקצה ערך False. הערך store_true של מילת המפתח פעולה מקצה ערך משתנה למשתנה print_string בכל פעם שצוין הארגומנט -p במפורש, אחרת המוקד משתייך למשתנה.
דוגמה 5: התייחס לערכי ארגומנט כרשימה
אם אתה רוצה לקבל מספר ערכים בבת אחת ולשמור אותם ברשימה, עליך לספק מילת מפתח nargs בפורמט הבא:
יְבוּאארגפרסמנתח =ארגפרס.ArgumentParser(תיאור='תוכנית ניסוי'.)
מנתח.add_argument('-p', '--print_string', עֶזרָה='מדפיס את הארגומנט שסופק.',נרגים='*')
טוען= מנתח.parse_args()
הדפס(טוען.מחרוזת הדפסה)
הפעל את הפקודה הבאה כדי לבדוק את הקוד למעלה:
$ ./מִבְחָן.py-p א באתה אמור לקבל פלט כזה:
['א', 'ב']סיכום
מודול הארגפרס הוא די מקיף עם המון אפשרויות לצבוט התנהגות של יישומי שורת פקודה ולנתח ערכים שסופקו על ידי משתמשים. דוגמאות אלה נוגעות אך ורק בשימוש הבסיסי של מודול הארגפרס. עבור יישומים מתקדמים ומורכבים, ייתכן שתזדקק ליישומים שונים. בקר ב תיעוד רשמי להסבר מלא של המודול.