sys — פונקציות ספציפיות למערכת

מודול זה מספק גישה למשתנים ולפונקציות הספציפיים לפרשן, כולל ארגומנטים של שורת הפקודה, נתיב חיפוש המודולים, הזרמים הסטנדרטיים ומידע על המימוש הפעיל.

פונקציות

sys.exit(retval: object = 0, /) NoReturn

מסיים את התוכנית הנוכחית עם קוד יציאה נתון. ברמה הפנימית, פונקציה זו מעלה חריגה מסוג SystemExit. אם ניתן ארגומנט, ערכו מועבר כארגומנט אל SystemExit.

ב-OpenMV Cam, חריגה לא מטופלת מסוג SystemExit גורמת כיום ל-איפוס רך של MicroPython.

sys.atexit(func: Callable[[], None] | None) Callable[[], None] | None

רושם את func כך שייקרא בעת הסיום. func חייב להיות אובייקט שניתן לקרוא לו ושאינו מקבל ארגומנטים, או None כדי לבטל את הקריאה. הפונקציה atexit תחזיר את הערך הקודם שנקבע על ידי פונקציה זו, שהוא None בתחילה.

הבדל מ-CPython

פונקציה זו היא הרחבה של MicroPython שנועדה לספק פונקציונליות דומה למודול atexit ב-CPython.

sys.print_exception(exc: BaseException, file: Any = sys.stdout, /) None

מדפיס חריגה יחד עם מעקב חזרה (traceback) אל אובייקט דמוי-קובץ file (או sys.stdout כברירת מחדל).

הבדל מ-CPython

זוהי גרסה מפושטת של פונקציה המופיעה במודול traceback ב-CPython. בניגוד ל-traceback.print_exception(), פונקציה זו מקבלת רק את ערך החריגה במקום את סוג החריגה, ערך החריגה ואובייקט המעקב; הארגומנט file צריך להיות מיקומי; ארגומנטים נוספים אינם נתמכים. ניתן למצוא מודול traceback תואם-CPython ב-micropython-lib.

sys.settrace(tracefunc: Callable | None) None

מפעיל מעקב אחר ביצוע bytecode. לפרטים ראו את תיעוד CPython.

פונקציה זו אינה זמינה ב-OpenMV Cam. היא מושבתת כברירת מחדל מכיוון שהיא מאטה את ביצוע הקוד; הפעלתה דורשת בניית קושחה מותאמת אישית.

קבועים

sys.argv: list[str]

רשימה ניתנת לשינוי של הארגומנטים שעמם הופעלה התוכנית הנוכחית.

sys.byteorder: str

סדר הבתים של המערכת ("little" או "big").

sys.implementation: object

אובייקט עם מידע על מימוש Python הנוכחי. עבור MicroPython, יש לו את התכונות הבאות:

  • name - מחרוזת ”micropython“

  • version - tuple (major, minor, micro, releaselevel), למשל (1, 22, 0, »«)

  • _machine - מחרוזת המתארת את המכונה הבסיסית

  • _mpy - גרסת פורמט קובץ mpy הנתמכת (תכונה אופציונלית)

  • _build - מחרוזת שיכולה לסייע בזיהוי התצורה שעמה נבנה MicroPython

  • _thread - תכונת מחרוזת אופציונלית, קיימת אם ליעד יש תמיכה ב-threading והיא בעלת הערך ”GIL“ או ”unsafe“

אובייקט זה הוא הדרך המומלצת להבחין בין MicroPython לבין מימושי Python אחרים (שימו לב שהוא עדיין עשוי שלא להתקיים בפורטים מינימליים מאוד).

החל מגרסה 1.22.0-preview, הצומת הרביעי releaselevel ב-implementation.version הוא מחרוזת ריקה או "preview".

הרשומה _build נוספה בגרסה 1.25.0 והיא קבוצה של רכיבים מופרדים במקפים. רכיבים חדשים עשויים להתווסף בעתיד, ולכן עדיף לגשת לשדה זה באמצעות sys.implementation._build.split("-"). הרכיבים שנמצאים כעת בשימוש הם:

  • ב-OpenMV Cam הרכיב הראשון הוא שם הלוח והרכיב השני (אם קיים) הוא הווריאנט של הלוח.

הרשומה _thread נוספה בגרסה 1.26.0, ואם היא קיימת אזי ליעד יש את המודול _thread. אם היעד מפעיל את ה-GIL (global interpreter lock) אזי תכונה זו היא "GIL". אחרת התכונה היא "unsafe" וליעד יש תמיכה ב-threading אך אינו מפעיל את ה-GIL, ואובייקטי Python ניתנים-לשינוי (כגון bytearray, list ו-dict) המשותפים בין threads חייבים להיות מוגנים במפורש על ידי מנעולים כגון _thread.allocate_lock.

הבדל מ-CPython

CPython מחייב תכונות נוספות עבור אובייקט זה, אך המינימום ההכרחי שבאמת שימושי ממומש ב-MicroPython.

sys.maxsize: int

הערך המרבי שטיפוס מספר שלם מקורי יכול להחזיק בפלטפורמה הנוכחית, או הערך המרבי הניתן לייצוג על ידי טיפוס המספר השלם של MicroPython, אם הוא קטן מהערך המרבי של הפלטפורמה (זה המצב בפורטים של MicroPython ללא תמיכה ב-long int).

תכונה זו שימושית לזיהוי ”רוחב הסיביות“ של פלטפורמה (32-סיביות מול 64-סיביות וכו«). מומלץ לא להשוות תכונה זו לערך מסוים ישירות, אלא לספור את מספר הסיביות שבה:

bits = 0
v = sys.maxsize
while v:
    bits += 1
    v >>= 1
if bits > 32:
    # 64-bit (or more) platform
    ...
else:
    # 32-bit (or less) platform
    # Note that on 32-bit platform, value of bits may be less than 32
    # (e.g. 31) due to peculiarities described above, so use "> 16",
    # "> 32", "> 64" style of comparisons.
sys.modules: dict

מילון של המודולים הטעונים. ב-OpenMV Cam אין הוא כולל מודולים מובנים.

sys.path: list[str]

רשימה ניתנת לשינוי של תיקיות לחיפוש מודולים מיובאים.

הבדל מ-CPython

ב-MicroPython, רשומה בעלת הערך ".frozen" תציין שהייבוא צריך לחפש מודולים מוקפאים בנקודה זו בחיפוש. אם לא נמצא מודול מוקפא אזי החיפוש לא יחפש תיקייה בשם .frozen, אלא ימשיך לרשומה הבאה ב-sys.path.

sys.platform: str

הפלטפורמה ש-MicroPython רץ עליה. זוהי מחרוזת המוגדרת על ידי הפורט/הלוח – למשל "mimxrt" ב-OpenMV RT1060 ו-"alif" ב-OpenMV AE3 (כמה OpenMV Cams ישנים יותר מדווחים מחרוזת ספציפית לדגם כגון "OpenMV4-H7"). כדי לבדוק אם התוכנית שלכם רצה על MicroPython (לעומת מימוש Python אחר), השתמשו ב-sys.implementation במקום זאת.

sys.ps1: str

תכונה ניתנת לשינוי המחזיקה את המחרוזת המשמשת לפקודת ה-REPL הראשית. ברירת המחדל נותנת את פקודת Python הסטנדרטית >>>. ראו גם sys.ps2 עבור פקודת ההמשך.

sys.ps2: str

תכונה ניתנת לשינוי המחזיקה את המחרוזת המשמשת לפקודת ההמשך של ה-REPL. ברירת המחדל נותנת את פקודת Python הסטנדרטית .... ראו גם sys.ps1 עבור הפקודה הראשית.

sys.stderr: object

זרם שגיאה סטנדרטי stream.

sys.stdin: object

זרם קלט סטנדרטי stream.

sys.stdout: object

זרם פלט סטנדרטי stream.

sys.tracebacklimit: int

תכונה ניתנת לשינוי המחזיקה ערך שלם שהוא המספר המרבי של רשומות מעקב חזרה לאחסון בחריגה. הגדירו ל-0 כדי להשבית הוספת מעקבים חזרה. ברירת המחדל היא 1000.

הערה: תכונה זו אינה זמינה ב-OpenMV Cam.

sys.version: str

גרסת שפת Python שמימוש זה תואם לה, כמחרוזת.

sys.version_info: tuple

גרסת שפת Python שמימוש זה תואם לה, כ-tuple של מספרים שלמים.

הבדל מ-CPython

רק שלושת מספרי הגרסה הראשונים (major, minor, micro) נתמכים וניתן להפנות אליהם רק לפי אינדקס, לא לפי שם.