os — שירותי ”מערכת הפעלה“ בסיסיים

המודול os מכיל פונקציות לגישה למערכת קבצים ולעיגונה, להפניית טרמינל ולשכפולו, ואת הפונקציות uname ו-urandom.

פונקציות כלליות

os.uname() Tuple[str, str, str, str, str]

מחזירה tuple (יכול להיות named tuple) המכיל מידע על המכונה הבסיסית ו/או מערכת ההפעלה שלה. ל-tuple חמישה שדות בסדר הבא, כל אחד מהם מחרוזת:

  • sysname – שם המערכת הבסיסית

  • nodename – שם הרשת (יכול להיות זהה ל-sysname)

  • release – גרסת המערכת הבסיסית

  • version – גרסת MicroPython ותאריך הבנייה

  • machine – מזהה לחומרה הבסיסית (למשל, לוח, מעבד)

os.urandom(n: int) bytes

מחזירה אובייקט bytes עם n בתים אקראיים. המקור מתאים מבחינה קריפטוגרפית בכל מצלמה נתמכת, אם כי המימוש משתנה לפי port:

  • מצלמות STM32 (M4, M7, H7, H7+, PT, N6) משתמשות בהתקן ה-RNG החומרתי של STM32.

  • מצלמות i.MX RT1062 (RT1060) משתמשות ב-TRNG החומרתי של השבב.

  • מצלמות Alif Ensemble (AE3) משתמשות בשירות האקראי החומרתי של ה-Secure Enclave.

  • Arduino Nano 33 BLE Sense משתמשת בהתקן ה-RNG החומרתי של ה-nRF52.

  • Arduino Nano RP2040 Connect אינה כוללת TRNG חומרתי; ה-PRNG של pico-sdk מאותחל בזרע וממוזג מחדש באופן רציף עם מקורות האנטרופיה שעל שבב ה-RP2040.

גישה למערכת קבצים

os.chdir(path: str) None

שינוי הספרייה הנוכחית.

os.getcwd() str

קבלת הספרייה הנוכחית.

os.ilistdir(dir: str | None = None) Iterator[Tuple]

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

ל-tuples יש את הצורה (name, type, inode[, size]):

  • name הוא מחרוזת (או bytes אם dir הוא אובייקט bytes) והוא שם הרשומה;

  • type הוא מספר שלם המציין את סוג הרשומה, כאשר 0x4000 מציין ספריות ו-0x8000 מציין קבצים רגילים;

  • inode הוא מספר שלם המתאים ל-inode של הקובץ, ויכול להיות 0 עבור מערכות קבצים שאין להן מושג כזה.

  • size הוא מספר שלם שעשוי להיכלל בהתאם לסוג מערכת הקבצים. עבור רשומות קבצים, size מייצג את גודל הקובץ או -1 אם אינו ידוע. משמעותו עבור רשומות ספריות אינה מוגדרת כרגע.

os.listdir(dir: str | None = None) List[str]

ללא ארגומנט, מפרטת את הספרייה הנוכחית. אחרת מפרטת את הספרייה הנתונה.

os.mkdir(path: str) None

יצירת ספרייה חדשה.

os.remove(path: str) None

הסרת קובץ.

הסרת קובץ. זהו כינוי ל-remove().

os.rmdir(path: str) None

הסרת ספרייה.

os.rename(old_path: str, new_path: str) None

שינוי שם קובץ.

os.stat(path: str) Tuple

קבלת מצב של קובץ או ספרייה.

os.statvfs(path: str) Tuple

קבלת מצב של מערכת קבצים.

מחזירה tuple עם מידע מערכת הקבצים בסדר הבא:

  • f_bsize – גודל בלוק של מערכת הקבצים

  • f_frsize – גודל פרגמנט

  • f_blocks – גודל מערכת הקבצים ביחידות f_frsize

  • f_bfree – מספר הבלוקים הפנויים

  • f_bavail – מספר הבלוקים הפנויים למשתמשים לא מורשים

  • f_files – מספר ה-inodes

  • f_ffree – מספר ה-inodes הפנויים

  • f_favail – מספר ה-inodes הפנויים למשתמשים לא מורשים

  • f_flag – דגלי עיגון

  • f_namemax – אורך שם הקובץ המרבי

פרמטרים הקשורים ל-inodes: f_files, f_ffree, f_favail והפרמטר f_flag עשויים להחזיר 0 משום שהם יכולים להיות לא זמינים במימוש ספציפי ל-port.

os.sync() None

סנכרון כל מערכות הקבצים.

os.sep: str

מפריד רכיבי הנתיב שבו משתמשת מערכת הקבצים, המחרוזת '/'.

הפניית טרמינל ושכפולו

os.dupterm(stream_object: Any, index: int = 0, /) Any

שכפול או החלפה של טרמינל MicroPython (ה-REPL) על האובייקט דמוי ה-stream הנתון. הארגומנט stream_object חייב להיות אובייקט stream מקורי, או לרשת מ-io.IOBase ולממש את המתודות readinto() ו-write(). ה-stream צריך להיות במצב לא-חוסם ו-readinto() צריכה להחזיר None אם אין נתונים זמינים לקריאה.

לאחר קריאה לפונקציה זו, כל פלט הטרמינל משוכפל על stream זה, וכל קלט הזמין ב-stream מועבר לקלט הטרמינל.

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

אם None מועבר כ-stream_object, השכפול מבוטל במשבצת הנתונה על ידי index.

הפונקציה מחזירה את האובייקט דמוי ה-stream הקודם במשבצת הנתונה.

os.dupterm_notify(obj_in: Any, /) None

הודעה ל-REPL של MicroPython שקלט זמין על אובייקט דמוי stream שנרשם קודם לכן באמצעות os.dupterm().

פונקציה זו צריכה להיקרא על ידי מימושי stream מותאמים אישית (למשל, UART, Bluetooth, או stream-ים אחרים של REPL שאינם USB) כדי ליידע את ה-REPL שקלט מוכן לקריאה. שימוש נכון מבטיח שתווים מיוחדים כגון Ctrl+C (המשמש להפעלת KeyboardInterrupt) יעובדו במהירות על ידי ה-REPL, ומאפשר התנהגות קטיעה צפויה עבור קוד המשתמש.

הפרמטר obj_in נעלם בידי os.dupterm_notify(), אך הוא נדרש כדי לאפשר קריאה ל-dupterm_notify ממטפל פסיקה כגון UART.irq().

דוגמה:

from machine import UART
import os
uart = UART(0)
os.dupterm(uart, 0)
uart.irq(os.dupterm_notify, machine.UART.IRQ_RX)

הערה

אם הפונקציה dupterm_notify() אינה נקראת, ייתכן שקלט מה-stream המותאם אישית לא יזוהה או יעובד עד לסקר (poll) ה-REPL הבא, דבר שעלול לעכב KeyboardInterrupt או אותות בקרה אחרים. זה חשוב במיוחד עבור UART, Bluetooth וחיבורי REPL אחרים שאינם סטנדרטיים, שבהם הודעה אוטומטית אינה מובטחת.

עיגון מערכת קבצים

הפונקציות והמחלקות הבאות הועברו למודול vfs. הן מסופקות במודול זה רק לצורך תאימות לאחור והן יוסרו בגרסה 2 של MicroPython.

os.mount(fsobj: Any, mount_point: str, *, readonly: bool = False) None

עיגון אובייקט מערכת הקבצים fsobj במיקום ב-VFS הנתון על ידי המחרוזת mount_point. fsobj יכול להיות אובייקט VFS שיש לו מתודת mount(), או התקן בלוקים. אם זהו התקן בלוקים, סוג מערכת הקבצים מזוהה אוטומטית (נזרקת חריגה אם לא זוהתה מערכת קבצים). mount_point יכול להיות '/' כדי לעגן את fsobj בשורש, או '/<name>' כדי לעגן אותו בתת-ספרייה תחת השורש.

אם readonly הוא True, מערכת הקבצים מעוגנת לקריאה בלבד.

במהלך תהליך העיגון, המתודה mount() נקראת על אובייקט מערכת הקבצים.

תזרוק OSError(EPERM) אם mount_point כבר מעוגן.

os.mount() List[Tuple[Any, str]]

ללא ארגומנטים ל-mount(), מחזירה רשימה של tuples המייצגים את כל נקודות העיגון הפעילות.

לרשימה המוחזרת יש את הצורה [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

ביטול עיגון של מערכת קבצים. mount_point יכול להיות מחרוזת המציינת את מיקום העיגון, או אובייקט מערכת קבצים שעוגן קודם לכן. במהלך תהליך ביטול העיגון, המתודה umount() נקראת על אובייקט מערכת הקבצים.

תזרוק OSError(EINVAL) אם mount_point לא נמצא.

class os.VfsFat(block_dev: AbstractBlockDev)

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

static mkfs(block_dev: AbstractBlockDev) None

בניית מערכת קבצים FAT על block_dev.

class os.VfsPosix(root: str | None = None)

יצירת אובייקט מערכת קבצים הניגש למערכת הקבצים POSIX של המארח. אם root מצוין, הוא צריך להיות נתיב במערכת הקבצים של המארח שישמש כשורש של אובייקט ה-VfsPosix. אחרת נעשה שימוש בספרייה הנוכחית של מערכת הקבצים של המארח.

הערה

VfsPosix זמין רק ב-Unix port; הוא אינו קיים ב-OpenMV Cam.