os — grundlegende „Betriebssystem“-Dienste¶
Das Modul os enthält Funktionen für den Dateisystemzugriff und das Einbinden, für Terminal-Umleitung und -Duplizierung sowie die Funktionen uname und urandom.
Allgemeine Funktionen¶
- os.uname() Tuple[str, str, str, str, str]¶
Gibt ein Tupel (möglicherweise ein benanntes Tupel) mit Informationen über die zugrunde liegende Maschine und/oder ihr Betriebssystem zurück. Das Tupel hat fünf Felder in der folgenden Reihenfolge, von denen jedes eine Zeichenkette ist:
sysname– Der Name des zugrunde liegenden Systemsnodename– Der Netzwerkname (kann mitsysnameidentisch sein)release– Die Version des zugrunde liegenden Systemsversion– Die MicroPython-Version und das Build-Datummachine– Eine Kennung für die zugrunde liegende Hardware (z. B. Board, CPU)
- os.urandom(n: int) bytes¶
Gibt ein Bytes-Objekt mit n zufälligen Bytes zurück. Die Quelle ist auf jeder unterstützten Cam kryptografisch geeignet, die Implementierung variiert jedoch je nach Port:
STM32-Cams (M4, M7, H7, H7+, PT, N6) verwenden das Hardware-RNG-Peripheriegerät des STM32.
i.MX RT1062-Cams (RT1060) verwenden den Hardware-TRNG des Chips.
Alif Ensemble-Cams (AE3) verwenden den Hardware-Zufallsdienst der Secure Enclave.
Arduino Nano 33 BLE Sense verwendet das Hardware-RNG-Peripheriegerät des nRF52.
Arduino Nano RP2040 Connect besitzt keinen Hardware-TRNG; der PRNG des pico-sdk wird mit den On-Chip-Entropiequellen des RP2040 initialisiert und kontinuierlich neu durchmischt.
Dateisystemzugriff¶
- os.ilistdir(dir: str | None = None) Iterator[Tuple]¶
Diese Funktion gibt einen Iterator zurück, der dann Tupel liefert, die den Einträgen im aufgelisteten Verzeichnis entsprechen. Ohne Argument listet sie das aktuelle Verzeichnis auf, andernfalls das durch dir angegebene Verzeichnis.
Die Tupel haben die Form (name, type, inode[, size]):
name ist eine Zeichenkette (oder Bytes, wenn dir ein Bytes-Objekt ist) und der Name des Eintrags;
type ist eine Ganzzahl, die den Typ des Eintrags angibt, mit 0x4000 für Verzeichnisse und 0x8000 für reguläre Dateien;
inode ist eine Ganzzahl, die dem Inode der Datei entspricht, und kann bei Dateisystemen, die kein solches Konzept kennen, 0 sein.
size ist eine Ganzzahl, die je nach Dateisystemtyp enthalten sein kann. Bei Dateieinträgen steht size für die Größe der Datei oder -1, falls unbekannt. Seine Bedeutung für Verzeichniseinträge ist derzeit nicht definiert.
- os.listdir(dir: str | None = None) List[str]¶
Ohne Argument wird das aktuelle Verzeichnis aufgelistet. Andernfalls wird das angegebene Verzeichnis aufgelistet.
- os.statvfs(path: str) Tuple¶
Ruft den Status eines Dateisystems ab.
Gibt ein Tupel mit den Dateisysteminformationen in der folgenden Reihenfolge zurück:
f_bsize– Blockgröße des Dateisystemsf_frsize– Fragmentgrößef_blocks– Größe des Dateisystems in f_frsize-Einheitenf_bfree– Anzahl freier Blöckef_bavail– Anzahl freier Blöcke für nicht privilegierte Benutzerf_files– Anzahl der Inodesf_ffree– Anzahl freier Inodesf_favail– Anzahl freier Inodes für nicht privilegierte Benutzerf_flag– Mount-Flagsf_namemax– Maximale Dateinamenlänge
Parameter, die sich auf Inodes beziehen:
f_files,f_ffree,f_favailund der Parameterf_flagkönnen0zurückgeben, da sie in einer portspezifischen Implementierung nicht verfügbar sein können.
Terminal-Umleitung und -Duplizierung¶
- os.dupterm(stream_object: Any, index: int = 0, /) Any¶
Dupliziert oder schaltet das MicroPython-Terminal (die REPL) auf das angegebene stream-ähnliche Objekt um. Das Argument stream_object muss ein natives Stream-Objekt sein oder von
io.IOBaseabgeleitet sein und die Methodenreadinto()undwrite()implementieren. Der Stream sollte sich im nicht blockierenden Modus befinden, undreadinto()sollteNonezurückgeben, wenn keine Daten zum Lesen verfügbar sind.Nach dem Aufruf dieser Funktion wird jede Terminalausgabe auf diesem Stream wiederholt, und jede auf dem Stream verfügbare Eingabe wird an die Terminaleingabe weitergeleitet.
Der Parameter index sollte eine nicht negative Ganzzahl sein und gibt an, welcher Duplizierungs-Slot gesetzt wird. Ein bestimmter Port kann mehr als einen Slot implementieren (Slot 0 ist immer verfügbar); in diesem Fall werden Terminaleingabe und -ausgabe auf allen gesetzten Slots dupliziert.
Wenn
Noneals stream_object übergeben wird, wird die Duplizierung auf dem durch index angegebenen Slot aufgehoben.Die Funktion gibt das vorherige stream-ähnliche Objekt im angegebenen Slot zurück.
- os.dupterm_notify(obj_in: Any, /) None¶
Benachrichtigt die MicroPython-REPL, dass auf einem zuvor über
os.dupterm()registrierten stream-ähnlichen Objekt Eingaben verfügbar sind.Diese Funktion sollte von benutzerdefinierten Stream-Implementierungen aufgerufen werden (z. B. UART, Bluetooth oder andere Nicht-USB-REPL-Streams), um die REPL darüber zu informieren, dass Eingaben zum Lesen bereitstehen. Die richtige Verwendung stellt sicher, dass Sonderzeichen wie Strg+C (zum Auslösen von KeyboardInterrupt) von der REPL umgehend verarbeitet werden, sodass das erwartete Unterbrechungsverhalten für Benutzercode ermöglicht wird.
Der Parameter obj_in wird von
os.dupterm_notify()ignoriert, ist aber erforderlich, um den Aufruf von dupterm_notify aus einem Interrupt-Handler wieUART.irq()zu ermöglichen.Beispiel:
from machine import UART import os uart = UART(0) os.dupterm(uart, 0) uart.irq(os.dupterm_notify, machine.UART.IRQ_RX)
Bemerkung
Wenn die Funktion
dupterm_notify()nicht aufgerufen wird, werden Eingaben vom benutzerdefinierten Stream möglicherweise erst beim nächsten REPL-Poll erkannt oder verarbeitet, was KeyboardInterrupts oder andere Steuersignale verzögern kann. Dies ist besonders wichtig für UART-, Bluetooth- und andere nicht standardmäßige REPL-Verbindungen, bei denen eine automatische Benachrichtigung nicht garantiert ist.
Einbinden von Dateisystemen¶
Die folgenden Funktionen und Klassen wurden in das Modul vfs verschoben. Sie werden in diesem Modul nur aus Gründen der Abwärtskompatibilität bereitgestellt und in Version 2 von MicroPython entfernt.
- os.mount(fsobj: Any, mount_point: str, *, readonly: bool = False) None¶
Bindet das Dateisystemobjekt fsobj an dem Ort im VFS ein, der durch die Zeichenkette mount_point angegeben ist. fsobj kann ein VFS-Objekt mit einer
mount()-Methode oder ein Blockgerät sein. Handelt es sich um ein Blockgerät, wird der Dateisystemtyp automatisch erkannt (eine Ausnahme wird ausgelöst, wenn kein Dateisystem erkannt wurde). mount_point kann'/'sein, um fsobj an der Wurzel einzubinden, oder'/<name>', um es in einem Unterverzeichnis unterhalb der Wurzel einzubinden.Wenn readonly
Trueist, wird das Dateisystem schreibgeschützt eingebunden.Während des Einbindevorgangs wird die Methode
mount()für das Dateisystemobjekt aufgerufen.Löst
OSError(EPERM)aus, wenn mount_point bereits eingebunden ist.
- os.mount() List[Tuple[Any, str]]
Ohne Argumente gibt
mount()eine Liste von Tupeln zurück, die alle aktiven Einbindepunkte darstellen.Die zurückgegebene Liste hat die Form [(fsobj, mount_point), …].
- os.umount(mount_point: str | Any) None¶
Bindet ein Dateisystem aus. mount_point kann eine Zeichenkette sein, die den Einbindeort benennt, oder ein zuvor eingebundenes Dateisystemobjekt. Während des Ausbindevorgangs wird die Methode
umount()für das Dateisystemobjekt aufgerufen.Löst
OSError(EINVAL)aus, wenn mount_point nicht gefunden wird.
- class os.VfsFat(block_dev: AbstractBlockDev)¶
Erstellt ein Dateisystemobjekt, das das FAT-Dateisystemformat verwendet. Der Speicher des FAT-Dateisystems wird durch block_dev bereitgestellt. Von diesem Konstruktor erstellte Objekte können mit
mount()eingebunden werden.- static mkfs(block_dev: AbstractBlockDev) None¶
Erstellt ein FAT-Dateisystem auf block_dev.
- class os.VfsPosix(root: str | None = None)¶
Erstellt ein Dateisystemobjekt, das auf das POSIX-Dateisystem des Hosts zugreift. Wenn root angegeben ist, sollte es ein Pfad im Host-Dateisystem sein, der als Wurzel des
VfsPosix-Objekts verwendet wird. Andernfalls wird das aktuelle Verzeichnis des Host-Dateisystems verwendet.Bemerkung
VfsPosixist nur auf dem Unix-Port verfügbar; auf der OpenMV Cam ist es nicht vorhanden.