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) נתמכים וניתן להפנות אליהם רק לפי אינדקס, לא לפי שם.