os — services basiques de « système d’exploitation »

Le module os contient des fonctions pour l’accès au système de fichiers et le montage, la redirection et la duplication du terminal, ainsi que les fonctions uname et urandom.

Fonctions générales

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

Renvoie un tuple (éventuellement un tuple nommé) contenant des informations sur la machine sous-jacente et/ou son système d’exploitation. Le tuple comporte cinq champs, dans l’ordre suivant, chacun étant une chaîne de caractères :

  • sysname – Le nom du système sous-jacent

  • nodename – Le nom réseau (peut être identique à sysname)

  • release – La version du système sous-jacent

  • version – La version de MicroPython et la date de compilation

  • machine – Un identifiant du matériel sous-jacent (par exemple carte, CPU)

os.urandom(n: int) bytes

Renvoie un objet bytes contenant n octets aléatoires. La source est adaptée à un usage cryptographique sur toutes les caméras prises en charge, bien que l’implémentation varie selon le port :

  • Les caméras STM32 (M4, M7, H7, H7+, PT, N6) utilisent le périphérique matériel RNG du STM32.

  • Les caméras i.MX RT1062 (RT1060) utilisent le TRNG matériel de la puce.

  • Les caméras Alif Ensemble (AE3) utilisent le service aléatoire matériel du Secure Enclave.

  • L’Arduino Nano 33 BLE Sense utilise le périphérique matériel RNG du nRF52.

  • L’Arduino Nano RP2040 Connect ne dispose pas de TRNG matériel ; le PRNG du pico-sdk est initialisé puis continuellement remélangé avec les sources d’entropie internes du RP2040.

Accès au système de fichiers

os.chdir(path: str) None

Change le répertoire courant.

os.getcwd() str

Récupère le répertoire courant.

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

Cette fonction renvoie un itérateur qui produit ensuite des tuples correspondant aux entrées du répertoire qu’elle liste. Sans argument, elle liste le répertoire courant, sinon elle liste le répertoire donné par dir.

Les tuples ont la forme (name, type, inode[, size]) :

  • name est une chaîne de caractères (ou des bytes si dir est un objet bytes) et correspond au nom de l’entrée ;

  • type est un entier qui spécifie le type de l’entrée, avec 0x4000 pour les répertoires et 0x8000 pour les fichiers ordinaires ;

  • inode est un entier correspondant à l’inode du fichier, et peut valoir 0 pour les systèmes de fichiers qui n’ont pas une telle notion.

  • size est un entier qui peut être inclus selon le type de système de fichiers. Pour les entrées de fichier, size représente la taille du fichier, ou -1 si elle est inconnue. Sa signification est actuellement indéfinie pour les entrées de répertoire.

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

Sans argument, liste le répertoire courant. Sinon, liste le répertoire donné.

os.mkdir(path: str) None

Crée un nouveau répertoire.

os.remove(path: str) None

Supprime un fichier.

Supprime un fichier. C’est un alias de remove().

os.rmdir(path: str) None

Supprime un répertoire.

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

Renomme un fichier.

os.stat(path: str) Tuple

Récupère le statut d’un fichier ou d’un répertoire.

os.statvfs(path: str) Tuple

Récupère le statut d’un système de fichiers.

Renvoie un tuple contenant les informations du système de fichiers dans l’ordre suivant :

  • f_bsize – Taille de bloc du système de fichiers

  • f_frsize – Taille de fragment

  • f_blocks – Taille du système de fichiers en unités de f_frsize

  • f_bfree – Nombre de blocs libres

  • f_bavail – Nombre de blocs libres pour les utilisateurs non privilégiés

  • f_files – Nombre d’inodes

  • f_ffree – Nombre d’inodes libres

  • f_favail – Nombre d’inodes libres pour les utilisateurs non privilégiés

  • f_flag – Indicateurs de montage

  • f_namemax – Longueur maximale d’un nom de fichier

Paramètres relatifs aux inodes : f_files, f_ffree, f_favail et le paramètre f_flag peuvent renvoyer 0 car ils peuvent être indisponibles dans une implémentation spécifique à un port.

os.sync() None

Synchronise tous les systèmes de fichiers.

os.sep: str

Le séparateur de composants de chemin utilisé par le système de fichiers, la chaîne '/'.

Redirection et duplication du terminal

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

Duplique ou bascule le terminal MicroPython (le REPL) sur l’objet de type stream donné. L’argument stream_object doit être un objet flux natif, ou dériver de io.IOBase et implémenter les méthodes readinto() et write(). Le flux doit être en mode non bloquant et readinto() doit renvoyer None s’il n’y a aucune donnée disponible à lire.

Après l’appel de cette fonction, toute sortie du terminal est répétée sur ce flux, et toute entrée disponible sur le flux est transmise à l’entrée du terminal.

Le paramètre index doit être un entier non négatif et spécifie quel emplacement de duplication est défini. Un port donné peut implémenter plusieurs emplacements (l’emplacement 0 est toujours disponible) et, dans ce cas, l’entrée et la sortie du terminal sont dupliquées sur tous les emplacements définis.

Si None est passé comme stream_object, alors la duplication est annulée sur l’emplacement donné par index.

La fonction renvoie l’objet de type flux précédent dans l’emplacement donné.

os.dupterm_notify(obj_in: Any, /) None

Notifie le REPL MicroPython que des données sont disponibles sur un objet de type flux préalablement enregistré via os.dupterm().

Cette fonction doit être appelée par les implémentations de flux personnalisées (par exemple, UART, Bluetooth ou d’autres flux REPL non USB) pour informer le REPL que des données sont prêtes à être lues. Une utilisation correcte garantit que les caractères spéciaux tels que Ctrl+C (utilisé pour déclencher KeyboardInterrupt) sont traités rapidement par le REPL, ce qui permet d’obtenir le comportement d’interruption attendu pour le code utilisateur.

Le paramètre obj_in est ignoré par os.dupterm_notify(), mais est requis pour permettre d’appeler dupterm_notify depuis un gestionnaire d’interruption tel que UART.irq().

Exemple :

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

Note

Si la fonction dupterm_notify() n’est pas appelée, l’entrée du flux personnalisé risque de ne pas être détectée ou traitée avant le prochain sondage du REPL, ce qui peut retarder les KeyboardInterrupts ou d’autres signaux de contrôle. Ceci est particulièrement important pour les connexions REPL via UART, Bluetooth et autres connexions non standard, où la notification automatique n’est pas garantie.

Montage du système de fichiers

Les fonctions et classes suivantes ont été déplacées vers le module vfs. Elles ne sont fournies dans ce module qu’à des fins de compatibilité ascendante et seront supprimées dans la version 2 de MicroPython.

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

Monte l’objet de système de fichiers fsobj à l’emplacement du VFS donné par la chaîne mount_point. fsobj peut être un objet VFS qui possède une méthode mount(), ou un périphérique bloc. S’il s’agit d’un périphérique bloc, le type de système de fichiers est détecté automatiquement (une exception est levée si aucun système de fichiers n’a été reconnu). mount_point peut être '/' pour monter fsobj à la racine, ou '/<name>' pour le monter dans un sous-répertoire sous la racine.

Si readonly vaut True, le système de fichiers est monté en lecture seule.

Pendant le processus de montage, la méthode mount() est appelée sur l’objet de système de fichiers.

Lève OSError(EPERM) si mount_point est déjà monté.

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

Sans argument, mount() renvoie une liste de tuples représentant tous les points de montage actifs.

La liste renvoyée a la forme [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Démonte un système de fichiers. mount_point peut être une chaîne nommant l’emplacement de montage, ou un objet de système de fichiers précédemment monté. Pendant le processus de démontage, la méthode umount() est appelée sur l’objet de système de fichiers.

Lève OSError(EINVAL) si mount_point est introuvable.

class os.VfsFat(block_dev: AbstractBlockDev)

Crée un objet de système de fichiers qui utilise le format de système de fichiers FAT. Le stockage du système de fichiers FAT est fourni par block_dev. Les objets créés par ce constructeur peuvent être montés à l’aide de mount().

static mkfs(block_dev: AbstractBlockDev) None

Construit un système de fichiers FAT sur block_dev.

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

Crée un objet de système de fichiers qui accède au système de fichiers POSIX de l’hôte. Si root est spécifié, il doit s’agir d’un chemin dans le système de fichiers de l’hôte à utiliser comme racine de l’objet VfsPosix. Sinon, le répertoire courant du système de fichiers de l’hôte est utilisé.

Note

VfsPosix n’est disponible que sur le port Unix ; il n’est pas présent sur l’OpenMV Cam.