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 Systems

  • nodename – Der Netzwerkname (kann mit sysname identisch sein)

  • release – Die Version des zugrunde liegenden Systems

  • version – Die MicroPython-Version und das Build-Datum

  • machine – 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.chdir(path: str) None

Wechselt das aktuelle Verzeichnis.

os.getcwd() str

Gibt das aktuelle Verzeichnis zurück.

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.mkdir(path: str) None

Erstellt ein neues Verzeichnis.

os.remove(path: str) None

Entfernt eine Datei.

Entfernt eine Datei. Dies ist ein Alias für remove().

os.rmdir(path: str) None

Entfernt ein Verzeichnis.

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

Benennt eine Datei um.

os.stat(path: str) Tuple

Ruft den Status einer Datei oder eines Verzeichnisses ab.

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 Dateisystems

  • f_frsize – Fragmentgröße

  • f_blocks – Größe des Dateisystems in f_frsize-Einheiten

  • f_bfree – Anzahl freier Blöcke

  • f_bavail – Anzahl freier Blöcke für nicht privilegierte Benutzer

  • f_files – Anzahl der Inodes

  • f_ffree – Anzahl freier Inodes

  • f_favail – Anzahl freier Inodes für nicht privilegierte Benutzer

  • f_flag – Mount-Flags

  • f_namemax – Maximale Dateinamenlänge

Parameter, die sich auf Inodes beziehen: f_files, f_ffree, f_favail und der Parameter f_flag können 0 zurückgeben, da sie in einer portspezifischen Implementierung nicht verfügbar sein können.

os.sync() None

Synchronisiert alle Dateisysteme.

os.sep: str

Das vom Dateisystem verwendete Trennzeichen für Pfadkomponenten, die Zeichenkette '/'.

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.IOBase abgeleitet sein und die Methoden readinto() und write() implementieren. Der Stream sollte sich im nicht blockierenden Modus befinden, und readinto() sollte None zurü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 None als 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 wie UART.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 True ist, 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

VfsPosix ist nur auf dem Unix-Port verfügbar; auf der OpenMV Cam ist es nicht vorhanden.