os — servizi di base del «sistema operativo»¶
Il modulo os contiene funzioni per l’accesso e il montaggio del filesystem, la redirezione e duplicazione del terminale, e le funzioni uname e urandom.
Funzioni generali¶
- os.uname() Tuple[str, str, str, str, str]¶
Restituisce una tupla (eventualmente una named tuple) contenente informazioni sulla macchina sottostante e/o sul suo sistema operativo. La tupla ha cinque campi nel seguente ordine, ciascuno dei quali è una stringa:
sysname– Il nome del sistema sottostantenodename– Il nome di rete (può essere uguale asysname)release– La versione del sistema sottostanteversion– La versione di MicroPython e la data di buildmachine– Un identificatore per l’hardware sottostante (ad es. board, CPU)
- os.urandom(n: int) bytes¶
Restituisce un oggetto bytes con n byte casuali. La sorgente è crittograficamente adeguata su ogni cam supportata, sebbene l’implementazione vari a seconda della port:
Le cam STM32 (M4, M7, H7, H7+, PT, N6) usano la periferica RNG hardware dell’STM32.
Le cam i.MX RT1062 (RT1060) usano il TRNG hardware del chip.
Le cam Alif Ensemble (AE3) usano il servizio random hardware del Secure Enclave.
L’Arduino Nano 33 BLE Sense usa la periferica RNG hardware dell’nRF52.
L’Arduino Nano RP2040 Connect non ha un TRNG hardware; il PRNG del pico-sdk viene inizializzato e continuamente rimescolato con le sorgenti di entropia on-chip dell’RP2040.
Accesso al filesystem¶
- os.ilistdir(dir: str | None = None) Iterator[Tuple]¶
Questa funzione restituisce un iteratore che produce tuple corrispondenti alle voci della directory che sta elencando. Senza argomenti elenca la directory corrente, altrimenti elenca la directory specificata da dir.
Le tuple hanno la forma (name, type, inode[, size]):
name è una stringa (o bytes se dir è un oggetto bytes) ed è il nome della voce;
type è un intero che specifica il tipo della voce, con 0x4000 per le directory e 0x8000 per i file regolari;
inode è un intero corrispondente all’inode del file, e può essere 0 per i filesystem che non hanno tale nozione.
size è un intero che può essere incluso a seconda del tipo di filesystem. Per le voci di file, size rappresenta la dimensione del file, o -1 se sconosciuta. Il suo significato è attualmente indefinito per le voci di directory.
- os.listdir(dir: str | None = None) List[str]¶
Senza argomenti, elenca la directory corrente. Altrimenti elenca la directory specificata.
- os.statvfs(path: str) Tuple¶
Ottiene lo stato di un filesystem.
Restituisce una tupla con le informazioni del filesystem nel seguente ordine:
f_bsize– Dimensione del blocco del filesystemf_frsize– Dimensione del frammentof_blocks– Dimensione del fs in unità f_frsizef_bfree– Numero di blocchi liberif_bavail– Numero di blocchi liberi per gli utenti non privilegiatif_files– Numero di inodef_ffree– Numero di inode liberif_favail– Numero di inode liberi per gli utenti non privilegiatif_flag– Flag di mountf_namemax– Lunghezza massima del nome del file
Parametri relativi agli inode:
f_files,f_ffree,f_favaile il parametrof_flagpossono restituire0in quanto possono non essere disponibili in un’implementazione specifica della port.
Redirezione e duplicazione del terminale¶
- os.dupterm(stream_object: Any, index: int = 0, /) Any¶
Duplica o commuta il terminale MicroPython (il REPL) sull’oggetto di tipo stream specificato. L’argomento stream_object deve essere un oggetto stream nativo, oppure derivare da
io.IOBasee implementare i metodireadinto()ewrite(). Lo stream dovrebbe essere in modalità non bloccante ereadinto()dovrebbe restituireNonese non vi sono dati disponibili per la lettura.Dopo la chiamata a questa funzione tutto l’output del terminale viene ripetuto su questo stream, e qualsiasi input disponibile sullo stream viene passato all’input del terminale.
Il parametro index dovrebbe essere un intero non negativo e specifica quale slot di duplicazione viene impostato. Una determinata port può implementare più di uno slot (lo slot 0 sarà sempre disponibile) e in tal caso l’input e l’output del terminale vengono duplicati su tutti gli slot impostati.
Se viene passato
Nonecome stream_object, la duplicazione viene annullata sullo slot specificato da index.La funzione restituisce il precedente oggetto di tipo stream nello slot specificato.
- os.dupterm_notify(obj_in: Any, /) None¶
Notifica al REPL di MicroPython che è disponibile input su un oggetto di tipo stream precedentemente registrato tramite
os.dupterm().Questa funzione dovrebbe essere chiamata da implementazioni di stream personalizzate (ad es. UART, Bluetooth o altri stream REPL non USB) per informare il REPL che l’input è pronto per la lettura. Un uso corretto garantisce che caratteri speciali come Ctrl+C (usato per attivare KeyboardInterrupt) vengano elaborati prontamente dal REPL, abilitando il comportamento di interruzione atteso per il codice utente.
Il parametro obj_in viene ignorato da
os.dupterm_notify(), ma è richiesto per consentire la chiamata di dupterm_notify da un handler di interrupt comeUART.irq().Esempio:
from machine import UART import os uart = UART(0) os.dupterm(uart, 0) uart.irq(os.dupterm_notify, machine.UART.IRQ_RX)
Nota
Se la funzione
dupterm_notify()non viene chiamata, l’input dallo stream personalizzato potrebbe non essere rilevato o elaborato fino al successivo poll del REPL, ritardando potenzialmente i KeyboardInterrupt o altri segnali di controllo. Questo è particolarmente importante per UART, Bluetooth e altre connessioni REPL non standard, dove la notifica automatica non è garantita.
Montaggio del filesystem¶
Le seguenti funzioni e classi sono state spostate nel modulo vfs. Sono fornite in questo modulo solo per retrocompatibilità e verranno rimosse nella versione 2 di MicroPython.
- os.mount(fsobj: Any, mount_point: str, *, readonly: bool = False) None¶
Monta l’oggetto filesystem fsobj nella posizione del VFS specificata dalla stringa mount_point. fsobj può essere un oggetto VFS che ha un metodo
mount(), oppure un block device. Se è un block device il tipo di filesystem viene rilevato automaticamente (viene sollevata un’eccezione se nessun filesystem viene riconosciuto). mount_point può essere'/'per montare fsobj nella root, oppure'/<name>'per montarlo in una sottodirectory sotto la root.Se readonly è
Trueallora il filesystem viene montato in sola lettura.Durante il processo di montaggio viene chiamato il metodo
mount()sull’oggetto filesystem.Solleva
OSError(EPERM)se mount_point è già montato.
- os.mount() List[Tuple[Any, str]]
Senza argomenti a
mount(), restituisce una lista di tuple che rappresentano tutti i punti di montaggio attivi.La lista restituita ha la forma [(fsobj, mount_point), …].
- os.umount(mount_point: str | Any) None¶
Smonta un filesystem. mount_point può essere una stringa che nomina la posizione di montaggio, oppure un oggetto filesystem precedentemente montato. Durante il processo di smontaggio viene chiamato il metodo
umount()sull’oggetto filesystem.Solleva
OSError(EINVAL)se mount_point non viene trovato.
- class os.VfsFat(block_dev: AbstractBlockDev)¶
Crea un oggetto filesystem che usa il formato di filesystem FAT. L’archiviazione del filesystem FAT è fornita da block_dev. Gli oggetti creati da questo costruttore possono essere montati usando
mount().- static mkfs(block_dev: AbstractBlockDev) None¶
Costruisce un filesystem FAT su block_dev.
- class os.VfsPosix(root: str | None = None)¶
Crea un oggetto filesystem che accede al filesystem POSIX dell’host. Se viene specificato root, esso dovrebbe essere un percorso nel filesystem dell’host da usare come root dell’oggetto
VfsPosix. Altrimenti viene usata la directory corrente del filesystem dell’host.Nota
VfsPosixè disponibile solo sulla port Unix; non è presente sull’OpenMV Cam.