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 subiacentnodename– Numele de rețea (poate fi același cusysname)release– Versiunea sistemului subiacentversion– Versiunea MicroPython și data compilăriimachine– 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.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.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șieref_frsize– Dimensiunea fragmentuluif_blocks– Dimensiunea sistemului de fișiere în unități f_frsizef_bfree– Numărul de blocuri liberef_bavail– Numărul de blocuri libere pentru utilizatorii neprivilegiațif_files– Numărul de inode-urif_ffree– Numărul de inode-uri liberef_favail– Numărul de inode-uri libere pentru utilizatorii neprivilegiațif_flag– Indicatori de montaref_namemax– Lungimea maximă a numelui de fișier
Parametrii legați de inode-uri:
f_files,f_ffree,f_favailși parametrulf_flagpot returna0, deoarece pot fi indisponibili într-o implementare specifică portului.
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 metodelereadinto()șiwrite(). Stream-ul ar trebui să fie în modul neblocant, iarreadinto()ar trebui să returnezeNonedacă 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ă
Noneeste 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 fiUART.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ă
VfsPosixeste disponibil doar pe portul Unix; nu este prezent pe OpenMV Cam.