os — servicii de bază ale „sistemului de operare”

Modulul os conține funcții pentru accesul la sistemul de fișiere și montare, redirecționarea și duplicarea terminalului, precum și funcțiile uname și urandom.

Funcții generale

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

Returnează un tuplu (posibil un tuplu denumit) care conține informații despre mașina subiacentă și/sau sistemul său de operare. Tuplul are cinci câmpuri în următoarea ordine, fiecare dintre ele fiind un șir de caractere:

  • sysname – Numele sistemului subiacent

  • nodename – Numele de rețea (poate fi același cu sysname)

  • release – Versiunea sistemului subiacent

  • version – Versiunea MicroPython și data compilării

  • machine – Un identificator pentru hardware-ul subiacent (de exemplu, placa, CPU)

os.urandom(n: int) bytes

Returnează un obiect bytes cu n octeți aleatori. Sursa este adecvată din punct de vedere criptografic pe fiecare cameră acceptată, deși implementarea variază în funcție de port:

  • Camerele STM32 (M4, M7, H7, H7+, PT, N6) folosesc perifericul hardware RNG al STM32.

  • Camerele i.MX RT1062 (RT1060) folosesc TRNG-ul hardware al cipului.

  • Camerele Alif Ensemble (AE3) folosesc serviciul hardware de generare aleatorie al Secure Enclave.

  • Arduino Nano 33 BLE Sense folosește perifericul hardware RNG al nRF52.

  • Arduino Nano RP2040 Connect nu are TRNG hardware; PRNG-ul din pico-sdk este inițializat și remixat continuu cu sursele de entropie de pe cipul RP2040.

Accesul la sistemul de fișiere

os.chdir(path: str) None

Schimbă directorul curent.

os.getcwd() str

Obține directorul curent.

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

Această funcție returnează un iterator care apoi produce tupluri corespunzătoare intrărilor din directorul pe care îl listează. Fără niciun argument, listează directorul curent, altfel listează directorul dat de dir.

Tuplurile au forma (name, type, inode[, size]):

  • name este un șir de caractere (sau bytes dacă dir este un obiect bytes) și reprezintă numele intrării;

  • type este un număr întreg care specifică tipul intrării, cu 0x4000 pentru directoare și 0x8000 pentru fișiere obișnuite;

  • inode este un număr întreg corespunzător inode-ului fișierului și poate fi 0 pentru sistemele de fișiere care nu au o astfel de noțiune.

  • size este un număr întreg care poate fi inclus în funcție de tipul sistemului de fișiere. Pentru intrările de fișier, size reprezintă dimensiunea fișierului sau -1 dacă este necunoscută. Semnificația sa este în prezent nedefinită pentru intrările de directoare.

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

Fără niciun argument, listează directorul curent. Altfel listează directorul dat.

os.mkdir(path: str) None

Creează un director nou.

os.remove(path: str) None

Șterge un fișier.

Șterge un fișier. Acesta este un alias pentru remove().

os.rmdir(path: str) None

Șterge un director.

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

Redenumește un fișier.

os.stat(path: str) Tuple

Obține starea unui fișier sau a unui director.

os.statvfs(path: str) Tuple

Obține starea unui sistem de fișiere.

Returnează un tuplu cu informațiile despre sistemul de fișiere în următoarea ordine:

  • f_bsize – Dimensiunea blocului sistemului de fișiere

  • f_frsize – Dimensiunea fragmentului

  • f_blocks – Dimensiunea sistemului de fișiere în unități f_frsize

  • f_bfree – Numărul de blocuri libere

  • f_bavail – Numărul de blocuri libere pentru utilizatorii neprivilegiați

  • f_files – Numărul de inode-uri

  • f_ffree – Numărul de inode-uri libere

  • f_favail – Numărul de inode-uri libere pentru utilizatorii neprivilegiați

  • f_flag – Indicatori de montare

  • f_namemax – Lungimea maximă a numelui de fișier

Parametrii legați de inode-uri: f_files, f_ffree, f_favail și parametrul f_flag pot returna 0, deoarece pot fi indisponibili într-o implementare specifică portului.

os.sync() None

Sincronizează toate sistemele de fișiere.

os.sep: str

Separatorul de componente de cale folosit de sistemul de fișiere, șirul '/'.

Redirecționarea și duplicarea terminalului

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

Duplică sau comută terminalul MicroPython (REPL-ul) pe obiectul de tip stream dat. Argumentul stream_object trebuie să fie un obiect stream nativ sau să derive din io.IOBase și să implementeze metodele readinto() și write(). Stream-ul ar trebui să fie în modul neblocant, iar readinto() ar trebui să returneze None dacă nu există date disponibile pentru citire.

După apelarea acestei funcții, întreaga ieșire a terminalului este repetată pe acest stream, iar orice intrare disponibilă pe stream este transmisă la intrarea terminalului.

Parametrul index ar trebui să fie un număr întreg nenegativ și specifică ce slot de duplicare este setat. Un anumit port poate implementa mai mult de un slot (slotul 0 va fi întotdeauna disponibil) și, în acest caz, intrarea și ieșirea terminalului sunt duplicate pe toate sloturile care sunt setate.

Dacă None este transmis ca stream_object, atunci duplicarea este anulată pe slotul dat de index.

Funcția returnează obiectul de tip stream anterior din slotul dat.

os.dupterm_notify(obj_in: Any, /) None

Notifică REPL-ul MicroPython că există intrare disponibilă pe un obiect de tip stream înregistrat anterior prin os.dupterm().

Această funcție ar trebui apelată de implementările personalizate de stream (de exemplu, UART, Bluetooth sau alte stream-uri REPL non-USB) pentru a informa REPL-ul că intrarea este gata de a fi citită. Utilizarea corectă asigură faptul că caractere speciale precum Ctrl+C (folosit pentru a declanșa KeyboardInterrupt) sunt procesate prompt de către REPL, permițând comportamentul de întrerupere așteptat pentru codul utilizatorului.

Parametrul obj_in este ignorat de os.dupterm_notify(), dar este necesar pentru a permite apelarea dupterm_notify dintr-un handler de întrerupere, cum ar fi UART.irq().

Exemplu:

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

Notă

Dacă funcția dupterm_notify() nu este apelată, intrarea de la stream-ul personalizat poate să nu fie detectată sau procesată până la următoarea interogare a REPL-ului, putând întârzia întreruperile KeyboardInterrupt sau alte semnale de control. Acest lucru este deosebit de important pentru conexiunile REPL UART, Bluetooth și alte conexiuni non-standard, unde notificarea automată nu este garantată.

Montarea sistemului de fișiere

Următoarele funcții și clase au fost mutate în modulul vfs. Ele sunt furnizate în acest modul doar pentru compatibilitate retroactivă și vor fi eliminate în versiunea 2 a MicroPython.

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

Montează obiectul sistem de fișiere fsobj la locația din VFS dată de șirul mount_point. fsobj poate fi un obiect VFS care are o metodă mount() sau un dispozitiv de tip bloc. Dacă este un dispozitiv de tip bloc, atunci tipul sistemului de fișiere este detectat automat (se generează o excepție dacă niciun sistem de fișiere nu a fost recunoscut). mount_point poate fi '/' pentru a monta fsobj la rădăcină sau '/<name>' pentru a-l monta la un subdirector sub rădăcină.

Dacă readonly este True, atunci sistemul de fișiere este montat în mod doar-citire.

În timpul procesului de montare, metoda mount() este apelată pe obiectul sistem de fișiere.

Va genera OSError(EPERM) dacă mount_point este deja montat.

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

Fără argumente pentru mount(), returnează o listă de tupluri care reprezintă toate punctele de montare active.

Lista returnată are forma [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Demontează un sistem de fișiere. mount_point poate fi un șir care denumește locația de montare sau un obiect sistem de fișiere montat anterior. În timpul procesului de demontare, metoda umount() este apelată pe obiectul sistem de fișiere.

Va genera OSError(EINVAL) dacă mount_point nu este găsit.

class os.VfsFat(block_dev: AbstractBlockDev)

Creează un obiect sistem de fișiere care folosește formatul de sistem de fișiere FAT. Stocarea sistemului de fișiere FAT este furnizată de block_dev. Obiectele create de acest constructor pot fi montate folosind mount().

static mkfs(block_dev: AbstractBlockDev) None

Construiește un sistem de fișiere FAT pe block_dev.

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

Creează un obiect sistem de fișiere care accesează sistemul de fișiere POSIX al gazdei. Dacă root este specificat, atunci ar trebui să fie o cale în sistemul de fișiere al gazdei care să fie folosită ca rădăcină a obiectului VfsPosix. Altfel, se folosește directorul curent al sistemului de fișiere al gazdei.

Notă

VfsPosix este disponibil doar pe portul Unix; nu este prezent pe OpenMV Cam.