sys — fonctions propres au système

Ce module donne accès à des variables et fonctions propres à l’interpréteur, notamment les arguments de la ligne de commande, le chemin de recherche des modules, les flux standard et des informations sur l’implémentation en cours d’exécution.

Fonctions

sys.exit(retval: object = 0, /) NoReturn

Termine le programme en cours avec le code de sortie indiqué. En interne, cette fonction lève une exception SystemExit. Si un argument est fourni, sa valeur est passée comme argument à SystemExit.

Sur l’OpenMV Cam, une exception SystemExit non gérée provoque actuellement un Réinitialisation logicielle (soft reset) de MicroPython.

sys.atexit(func: Callable[[], None] | None) Callable[[], None] | None

Enregistre func pour qu’elle soit appelée à la fin du programme. func doit être un objet appelable ne prenant aucun argument, ou None pour désactiver l’appel. La fonction atexit renvoie la valeur précédemment définie par cette fonction, qui vaut initialement None.

Différence avec CPython

Cette fonction est une extension de MicroPython destinée à fournir une fonctionnalité semblable au module atexit de CPython.

sys.print_exception(exc: BaseException, file: Any = sys.stdout, /) None

Affiche une exception accompagnée de sa trace d’appels dans un objet de type fichier file (ou sys.stdout par défaut).

Différence avec CPython

Il s’agit d’une version simplifiée d’une fonction présente dans le module traceback de CPython. Contrairement à traceback.print_exception(), cette fonction prend uniquement la valeur de l’exception au lieu du type de l’exception, de sa valeur et de l’objet de trace d’appels ; l’argument file doit être positionnel ; les arguments supplémentaires ne sont pas pris en charge. Un module traceback compatible avec CPython se trouve dans micropython-lib.

sys.settrace(tracefunc: Callable | None) None

Active le traçage de l’exécution du bytecode. Pour plus de détails, voir la documentation CPython.

Cette fonction n’est pas disponible sur l’OpenMV Cam. Elle est désactivée par défaut car elle ralentit l’exécution du code ; son activation nécessite la compilation d’un micrologiciel personnalisé.

Constantes

sys.argv: list[str]

Une liste modifiable des arguments avec lesquels le programme en cours a été démarré.

sys.byteorder: str

L’ordre des octets du système ("little" ou "big").

sys.implementation: object

Objet contenant des informations sur l’implémentation Python actuelle. Pour MicroPython, il possède les attributs suivants :

  • name - la chaîne « micropython »

  • version - tuple (major, minor, micro, releaselevel), par exemple (1, 22, 0, “”)

  • _machine - une chaîne décrivant la machine sous-jacente

  • _mpy - la version du format de fichier mpy prise en charge (attribut facultatif)

  • _build - une chaîne pouvant aider à identifier la configuration avec laquelle MicroPython a été compilé

  • _thread - attribut de type chaîne facultatif, présent si la cible prend en charge le multithreading et valant soit « GIL », soit « unsafe »

Cet objet est le moyen recommandé pour distinguer MicroPython des autres implémentations Python (notez qu’il peut tout de même ne pas exister dans les portages les plus minimaux).

À partir de la version 1.22.0-preview, le quatrième élément releaselevel de implementation.version est soit une chaîne vide, soit "preview".

L’entrée _build a été ajoutée dans la version 1.25.0 et constitue un ensemble d’éléments séparés par des tirets. De nouveaux éléments pourront être ajoutés à l’avenir, il est donc préférable d’accéder à ce champ via sys.implementation._build.split("-"). Les éléments actuellement utilisés sont :

  • Sur l’OpenMV Cam, le premier élément est le nom de la carte et le second (s’il est présent) la variante de la carte.

L’entrée _thread a été ajoutée dans la version 1.26.0 et, si elle existe, la cible dispose du module _thread. Si la cible active le GIL (verrou global de l’interpréteur), cet attribut vaut "GIL". Sinon, l’attribut vaut "unsafe" et la cible prend en charge le multithreading sans activer le GIL ; les objets Python modifiables (tels que bytearray, list et dict) partagés entre plusieurs threads doivent alors être protégés explicitement par des verrous tels que _thread.allocate_lock.

Différence avec CPython

CPython impose davantage d’attributs pour cet objet, mais le strict minimum réellement utile est implémenté dans MicroPython.

sys.maxsize: int

La valeur maximale qu’un type entier natif peut contenir sur la plateforme actuelle, ou la valeur maximale représentable par le type entier de MicroPython si elle est plus petite que la valeur maximale de la plateforme (c’est le cas des portages de MicroPython sans prise en charge des entiers longs).

Cet attribut est utile pour détecter la « capacité en bits » d’une plateforme (32 bits contre 64 bits, etc.). Il est recommandé de ne pas comparer directement cet attribut à une valeur donnée, mais plutôt de compter le nombre de bits qu’il contient

bits = 0
v = sys.maxsize
while v:
    bits += 1
    v >>= 1
if bits > 32:
    # 64-bit (or more) platform
    ...
else:
    # 32-bit (or less) platform
    # Note that on 32-bit platform, value of bits may be less than 32
    # (e.g. 31) due to peculiarities described above, so use "> 16",
    # "> 32", "> 64" style of comparisons.
sys.modules: dict

Dictionnaire des modules chargés. Sur l’OpenMV Cam, il n’inclut pas les modules intégrés.

sys.path: list[str]

Une liste modifiable de répertoires dans lesquels rechercher les modules importés.

Différence avec CPython

Sur MicroPython, une entrée ayant la valeur ".frozen" indique que l’importation doit rechercher les modules figés à ce point de la recherche. Si aucun module figé n’est trouvé, la recherche ne cherchera pas un répertoire nommé .frozen ; elle poursuivra plutôt avec l’entrée suivante de sys.path.

sys.platform: str

La plateforme sur laquelle MicroPython s’exécute. Il s’agit d’une chaîne définie par le portage ou la carte – par exemple "mimxrt" sur l’OpenMV RT1060 et "alif" sur l’OpenMV AE3 (certaines anciennes OpenMV Cam renvoient une chaîne spécifique au modèle, telle que "OpenMV4-H7"). Pour vérifier si votre programme s’exécute sur MicroPython (par opposition à une autre implémentation Python), utilisez plutôt sys.implementation.

sys.ps1: str

Attribut modifiable contenant la chaîne utilisée pour l’invite principale du REPL. La valeur par défaut donne l’invite Python standard >>>. Voir aussi sys.ps2 pour l’invite de continuation.

sys.ps2: str

Attribut modifiable contenant la chaîne utilisée pour l’invite de continuation du REPL. La valeur par défaut donne l’invite Python standard .... Voir aussi sys.ps1 pour l’invite principale.

sys.stderr: object

Flux d’erreur standard.

sys.stdin: object

Flux d’entrée standard.

sys.stdout: object

Flux de sortie standard.

sys.tracebacklimit: int

Attribut modifiable contenant une valeur entière correspondant au nombre maximal d’entrées de trace d’appels à conserver dans une exception. Mettez-le à 0 pour désactiver l’ajout des traces d’appels. La valeur par défaut est 1000.

Remarque : cet attribut n’est pas disponible sur l’OpenMV Cam.

sys.version: str

La version du langage Python à laquelle cette implémentation se conforme, sous forme de chaîne.

sys.version_info: tuple

La version du langage Python à laquelle cette implémentation se conforme, sous forme de tuple d’entiers.

Différence avec CPython

Seuls les trois premiers numéros de version (major, minor, micro) sont pris en charge et ils ne peuvent être référencés que par index, et non par nom.