לדלג לתוכן

6.2 ארגומנטים לתוכנה הרצאה

ארגומנטים לתוכנה - program arguments

  • ממש כמו פונקציות גם תוכנות יכולות לקבל ארגומנטים, דמיינו שממש כשאנחנו מריצים את התוכנה שלנו - python main.py אנחנו יכולים להביא פרמטרים לתוכנה כשאנחנו מריצים אותה.
    דוגמה: בטרמינל כשאנחנו מריצים קוד פייתון, אפשר להביא ארגומנטים בצורה הבאה:
    python main.py argument1=2
    python main.py dadasdqweewq
    python main.py --some-argument

  • הפיצ'ר הזה מאוד שימושי כשאנחנו בונים תוכנות. דמיינו ואנחנו רוצים לכתוב תוכנת פייתון של מחשבון, כך שכאשר אנחנו מריצים אותה אנחנו נרצה להעביר לה ביטוי לחשב כמו 5+3.. נוכל להעביר את הביטוי הזה בארגומנטים של התוכנה בדרך הבאה:
    python calculator.py 5+3

למה צריך ארגומנטים לתוכנות?

  • משמש אותנו כעוד דרך כמתכנתים לקבל קלט מהמשתמש.
    דוגמה: כשכותבים תוכנות שמטרתם היא לרוץ בטרמינל, למשל דמיינו והיינו צריכים לכתוב תוכנה שמציגה תוכן של קובץ שאנחנו מציינים לה בארגומנטים. python view_file.py .\my_file
    תוכנות כאלו ממש יכולות להיקרא כמו פקודות בטרמינל, והכל בזכות השימוש של ארגומנטים של תוכנה.
  • למעשה, כאשר אנחנו מריצים את התוכנה python בטרמינל, אנחנו מעבירים לה ארגומנט, שזה הקובץ פייתון שאנחנו רוצים להריץ. כך שלמעשה התוכנה python שכל הזמן השתמשנו בה, היא בעצמה מקבלת ארגומנטים.
    python main.py

איך מעבירים ארגומנטים?

  • איך מעבירים ארגומנטים בPyCharm?

    • לחצו על השלושה נקודות למעלה, Pasted image 20240205132655.png

    • לחצו על edit Pasted image 20240205132837.png

    • עכשיו הוסיפו בשדה parameters את הארגומנטים, ולחצו apply.
    • עכשיו כשתריצו את התוכנה PyCharm יעביר לה את הארגומנטים.
    • חזרה: איך מעבירים ארגומנטים בטרמינל?
    • נריץ את הקוד עם הפקודה פייתון, וכל דבר שיבוא אחרי ייחשב כארגומנט:
      python .\main.py some_argument 3424 dfsdfds

התנהלות עם ארגומנטים - program args

  • איך אפשר להתנהל עם הארגומנטים שקיבלנו לתוכנת פייתון שלנו אחרי שהעבירו לנו אותם?
  • בפייתון כדי להתנהל עם הארגומנטים שמעבירים לתוכנה שלנו אנחנו יכולים להשתמש במודולים כמו sys ו - argparse

התנהלות מול program args עם sys

  • המודול sys הוא מודול מובנה, לא צריך להתקין כלום.
  • המודול מאפשר לנו לגשת לרשימה של כל הארגומנטים באמצעות sys.argv
    import sys
    
    # Check the number of arguments
    if len(sys.argv) < 2:
        print("Usage: python script.py <argument>")
        sys.exit(1)  # Exit with a non-zero status code to indicate an error
    
    # Accessing command-line arguments
    script_name = sys.argv[0]
    user_argument = sys.argv[1]
    
    print("Script Name:", script_name)
    print("User Argument:", user_argument)
    
  • המשתנה argv מכיל רשימה של כל הארגומנטים של התוכנה.
  • שימו לב: הארגומנט מספר 0 שמעובר ברשימה הוא ארגומנט שמכיל את שם התוכנה.

התנהלות מול program args עם argparse

  • זה מודול חיצוני שצריך להתקין עם הפקודה pip install argparse, שמאפשר לנו להתנהל מול ארגומנטים לתוכנה שלנו ברמה יותר גבוהה.
    import argparse
    
    def main():
        # Create ArgumentParser object
        parser = argparse.ArgumentParser(description="A script that demonstrates argparse.")
    
        # Add positional argument
        parser.add_argument("user_argument", type=str, help="User-provided argument")
    
        # Add optional argument with a default value
        parser.add_argument("--optional_argument", type=int, default=10, help="An optional integer argument (default: 10)")
    
        # Add a boolean flag
        parser.add_argument("--flag", action="store_true", help="A boolean flag")
    
        # Parse the command-line arguments
        args = parser.parse_args()
    
        # Accessing arguments
        user_argument = args.user_argument
        optional_argument = args.optional_argument
        flag_enabled = args.flag
    
        # Perform actions based on arguments
        print("User Argument:", user_argument)
        print("Optional Argument:", optional_argument)
        print("Flag Enabled:", flag_enabled)
    
    if __name__ == "__main__":
        main()
    
  • אנחנו יוצרים אובייקט מהמחלקה ArgumentParser, נשתמש באובייקט הזה כדי לציין איזה סוגים של ארגומנטים התוכנה שלנו אמורה לקבל.
  • באמצעות המתודה add_argument אנחנו יכולים להוסיף סוג של ארגומנט שאנחנו מצפים לקבל מהמשתמש, הנה דוגמה של 3 סוגים של ארגומנטים שאנחנו יכולים לקבל והגדרתם:
    הגדרת ארגומנט שאנחנו מחייבים את המשתמש להעביר (חייב להכיל ערך מסויים)

        parser.add_argument("user_argument", type=str, help="User-provided argument")
    

    הגדרת ארגומנט שהמתשתמש לא חייב להעביר (ארגומנט בעל ערך עם ברירת מחדל)
        parser.add_argument("--optional_argument", type=int, default=10, help="An optional integer argument (default: 10)")
    

    "פלאג" - דגל: ארגומנט שלא מכיל ערך מסויים, מטרתו ממש לתת לנו קלט של אמת או שקר.
        parser.add_argument("--flag", action="store_true", help="A boolean flag")
    

    אחרכך נוכל לעשות לקרוא לparse_args כדי להפעיל את הארגומנטים ולגשת אליהם כך:
    args = parser.parse_args()
    
    user_argument = args.user_argument
    optional_argument = args.optional_argument
    flag_enabled = args.flag
    

    עכשיו המשתמש יוכל להעביר ארגומנטים לתוכנה שלכם בצורה מבוקרת יותר.

  • בנוסף: המודול יוצר לנו אוטמטית ארגומנט main.py --help\. שאם המשתמש יעביר לתוכנה שלנו הוא יקבל הודעת עזרה עם הסבר על כל הארגומנטים שהוא יכול להעביר.