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.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.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עבור הפקודה הראשית.