sys – system specific functions
This module provides access to interpreter-specific variables and functions, including command-line arguments, the module search path, standard streams, and information about the running implementation.
Functions
- sys.exit(retval: object = 0, /) NoReturn
Terminate current program with a given exit code. Underlyingly, this function raises a
SystemExitexception. If an argument is given, its value given as an argument toSystemExit.On embedded ports (i.e. all ports but Windows and Unix), an unhandled
SystemExitcurrently causes a Soft Reset of MicroPython.
- sys.atexit(func: Callable[[], None] | None) Callable[[], None] | None
Register func to be called upon termination. func must be a callable that takes no arguments, or
Noneto disable the call. Theatexitfunction will return the previous value set by this function, which is initiallyNone.Difference to CPython
This function is a MicroPython extension intended to provide similar functionality to the
atexitmodule in CPython.
- sys.print_exception(exc: BaseException, file: Any = sys.stdout, /) None
Print exception with a traceback to a file-like object file (or
sys.stdoutby default).Difference to CPython
This is simplified version of a function which appears in the
tracebackmodule in CPython. Unliketraceback.print_exception(), this function takes just exception value instead of exception type, exception value, and traceback object; file argument should be positional; further arguments are not supported. CPython-compatibletracebackmodule can be found inmicropython-lib.
- sys.settrace(tracefunc: Callable | None) None
Enable tracing of bytecode execution. For details see the CPython documentation.
This function requires a custom MicroPython build as it is typically not present in pre-built firmware (due to it affecting performance). The relevant configuration option is MICROPY_PY_SYS_SETTRACE.
Constants
- sys.implementation: object
Object with information about the current Python implementation. For MicroPython, it has following attributes:
name - string “micropython”
version - tuple (major, minor, micro, releaselevel), e.g. (1, 22, 0, ‘’)
_machine - string describing the underlying machine
_mpy - supported mpy file-format version (optional attribute)
_build - string that can help identify the configuration that MicroPython was built with
_thread - optional string attribute, exists if the target has threading and is either “GIL” or “unsafe”
This object is the recommended way to distinguish MicroPython from other Python implementations (note that it still may not exist in the very minimal ports).
Starting with version 1.22.0-preview, the fourth node releaselevel in implementation.version is either an empty string or
"preview".The _build entry was added in version 1.25.0 and is a hyphen-separated set of elements. New elements may be appended in the future so it’s best to access this field using
sys.implementation._build.split("-"). The elements that are currently used are:On the unix, webassembly and windows ports the first element is the variant name, for example
'standard'.On microcontroller targets, the first element is the board name and the second element (if present) is the board variant, for example
'RPI_PICO2-RISCV'
The _thread entry was added in version 1.26.0 and if it exists then the target has the
_threadmodule. If the target enables the GIL (global interpreter lock) then this attribute is"GIL". Otherwise the attribute is"unsafe"and the target has threading but does not enable the GIL, and mutable Python objects (such asbytearray,listanddict) that are shared amongst threads must be protected explicitly by locks such as_thread.allocate_lock.Difference to CPython
CPython mandates more attributes for this object, but the actual useful bare minimum is implemented in MicroPython.
- sys.maxsize: int
Maximum value which a native integer type can hold on the current platform, or maximum value representable by MicroPython integer type, if it’s smaller than platform max value (that is the case for MicroPython ports without long int support).
This attribute is useful for detecting “bitness” of a platform (32-bit vs 64-bit, etc.). It’s recommended to not compare this attribute to some value directly, but instead count number of bits in it:
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.path: list[str]
A mutable list of directories to search for imported modules.
Difference to CPython
On MicroPython, an entry with the value
".frozen"will indicate that import should search frozen modules at that point in the search. If no frozen module is found then search will not look for a directory called.frozen, instead it will continue with the next entry insys.path.
- sys.platform: str
The platform that MicroPython is running on. For OS/RTOS ports, this is usually an identifier of the OS, e.g.
"linux". For baremetal ports it is an identifier of a board, e.g."pyboard"for the original MicroPython reference board. It thus can be used to distinguish one board from another. If you need to check whether your program runs on MicroPython (vs other Python implementation), usesys.implementationinstead.
- sys.ps1: str
- sys.ps2: str
Mutable attributes holding strings, which are used for the REPL prompt. The defaults give the standard Python prompt of
>>>and....