os — basale “besturingssysteem”-services

De module os bevat functies voor toegang tot en het mounten van het bestandssysteem, terminalomleiding en -duplicatie, en de functies uname en urandom.

Algemene functies

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

Geeft een tuple (mogelijk een named tuple) terug met informatie over de onderliggende machine en/of het besturingssysteem ervan. De tuple heeft vijf velden in de volgende volgorde, die elk een string zijn:

  • sysname – De naam van het onderliggende systeem

  • nodename – De netwerknaam (kan gelijk zijn aan sysname)

  • release – De versie van het onderliggende systeem

  • version – De MicroPython-versie en bouwdatum

  • machine – Een identificatie voor de onderliggende hardware (bijv. board, CPU)

os.urandom(n: int) bytes

Geeft een bytes-object terug met n willekeurige bytes. De bron is cryptografisch geschikt op elke ondersteunde cam, hoewel de implementatie per port verschilt:

  • STM32-cams (M4, M7, H7, H7+, PT, N6) gebruiken het hardware-RNG-randapparaat van de STM32.

  • i.MX RT1062-cams (RT1060) gebruiken de hardware-TRNG van de chip.

  • Alif Ensemble-cams (AE3) gebruiken de hardware-willekeurigheidsservice van de Secure Enclave.

  • Arduino Nano 33 BLE Sense gebruikt het hardware-RNG-randapparaat van de nRF52.

  • Arduino Nano RP2040 Connect heeft geen hardware-TRNG; de PRNG van de pico-sdk wordt geïnitialiseerd en continu opnieuw gemengd met de on-chip entropiebronnen van de RP2040.

Toegang tot het bestandssysteem

os.chdir(path: str) None

Wijzig de huidige map.

os.getcwd() str

Verkrijg de huidige map.

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

Deze functie geeft een iterator terug die vervolgens tuples oplevert die overeenkomen met de items in de map die wordt opgesomd. Zonder argument somt deze de huidige map op, anders somt deze de map op die door dir wordt opgegeven.

De tuples hebben de vorm (name, type, inode[, size]):

  • name is een string (of bytes als dir een bytes-object is) en is de naam van het item;

  • type is een geheel getal dat het type van het item aangeeft, met 0x4000 voor mappen en 0x8000 voor reguliere bestanden;

  • inode is een geheel getal dat overeenkomt met de inode van het bestand, en kan 0 zijn voor bestandssystemen die zo’n begrip niet kennen.

  • size is een geheel getal dat kan worden opgenomen afhankelijk van het type bestandssysteem. Voor bestandsitems stelt size de grootte van het bestand voor, of -1 indien onbekend. De betekenis ervan is momenteel ongedefinieerd voor mapitems.

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

Somt zonder argument de huidige map op. Anders somt deze de opgegeven map op.

os.mkdir(path: str) None

Maak een nieuwe map aan.

os.remove(path: str) None

Verwijder een bestand.

Verwijder een bestand. Dit is een alias voor remove().

os.rmdir(path: str) None

Verwijder een map.

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

Hernoem een bestand.

os.stat(path: str) Tuple

Verkrijg de status van een bestand of map.

os.statvfs(path: str) Tuple

Verkrijg de status van een bestandssysteem.

Geeft een tuple terug met de bestandssysteeminformatie in de volgende volgorde:

  • f_bsize – Blokgrootte van het bestandssysteem

  • f_frsize – Fragmentgrootte

  • f_blocks – Grootte van het fs in f_frsize-eenheden

  • f_bfree – Aantal vrije blokken

  • f_bavail – Aantal vrije blokken voor niet-bevoorrechte gebruikers

  • f_files – Aantal inodes

  • f_ffree – Aantal vrije inodes

  • f_favail – Aantal vrije inodes voor niet-bevoorrechte gebruikers

  • f_flag – Mount-vlaggen

  • f_namemax – Maximale bestandsnaamlengte

Parameters met betrekking tot inodes: f_files, f_ffree, f_favail en de parameter f_flag kunnen 0 teruggeven, aangezien ze niet beschikbaar kunnen zijn in een port-specifieke implementatie.

os.sync() None

Synchroniseer alle bestandssystemen.

os.sep: str

Het scheidingsteken voor padcomponenten dat door het bestandssysteem wordt gebruikt, de string '/'.

Terminalomleiding en -duplicatie

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

Dupliceer of schakel de MicroPython-terminal (de REPL) op het opgegeven stream-achtige object. Het argument stream_object moet een native stream-object zijn, of afleiden van io.IOBase en de methoden readinto() en write() implementeren. De stream moet in niet-blokkerende modus staan en readinto() moet None teruggeven als er geen gegevens beschikbaar zijn om te lezen.

Na het aanroepen van deze functie wordt alle terminaluitvoer herhaald op deze stream, en wordt alle invoer die op de stream beschikbaar is doorgegeven aan de terminalinvoer.

De parameter index moet een niet-negatief geheel getal zijn en geeft aan welke duplicatieslot wordt ingesteld. Een bepaalde port kan meer dan één slot implementeren (slot 0 is altijd beschikbaar) en in dat geval wordt terminalinvoer en -uitvoer gedupliceerd op alle slots die zijn ingesteld.

Als None wordt doorgegeven als stream_object, wordt de duplicatie geannuleerd op het slot dat door index wordt opgegeven.

De functie geeft het vorige stream-achtige object in het opgegeven slot terug.

os.dupterm_notify(obj_in: Any, /) None

Stel de MicroPython-REPL op de hoogte dat er invoer beschikbaar is op een stream-achtig object dat eerder is geregistreerd via os.dupterm().

Deze functie moet worden aangeroepen door aangepaste stream-implementaties (bijv. UART, Bluetooth of andere niet-USB-REPL-streams) om de REPL te informeren dat er invoer klaar is om te worden gelezen. Correct gebruik zorgt ervoor dat speciale tekens zoals Ctrl+C (gebruikt om een KeyboardInterrupt te activeren) snel door de REPL worden verwerkt, wat het verwachte onderbrekingsgedrag voor gebruikerscode mogelijk maakt.

De parameter obj_in wordt door os.dupterm_notify() genegeerd, maar is vereist om dupterm_notify te kunnen aanroepen vanuit een interrupt-handler zoals UART.irq().

Voorbeeld:

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

Notitie

Als de functie dupterm_notify() niet wordt aangeroepen, wordt invoer van de aangepaste stream mogelijk pas bij de volgende REPL-poll gedetecteerd of verwerkt, wat KeyboardInterrupts of andere besturingssignalen kan vertragen. Dit is met name belangrijk voor UART, Bluetooth en andere niet-standaard REPL-verbindingen, waar automatische notificatie niet gegarandeerd is.

Bestandssysteem mounten

De volgende functies en klassen zijn verplaatst naar de module vfs. Ze worden in deze module alleen aangeboden voor achterwaartse compatibiliteit en zullen in versie 2 van MicroPython worden verwijderd.

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

Mount het bestandssysteemobject fsobj op de locatie in de VFS die door de string mount_point wordt opgegeven. fsobj kan een VFS-object zijn dat een mount()-methode heeft, of een blokapparaat. Als het een blokapparaat is, wordt het type bestandssysteem automatisch gedetecteerd (er wordt een uitzondering opgeworpen als er geen bestandssysteem werd herkend). mount_point kan '/' zijn om fsobj op de root te mounten, of '/<name>' om het op een submap onder de root te mounten.

Als readonly gelijk is aan True, wordt het bestandssysteem alleen-lezen gemount.

Tijdens het mount-proces wordt de methode mount() op het bestandssysteemobject aangeroepen.

Werpt OSError(EPERM) op als mount_point al gemount is.

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

Zonder argumenten voor mount(), geef een lijst van tuples terug die alle actieve mountpunten voorstellen.

De teruggegeven lijst heeft de vorm [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Unmount een bestandssysteem. mount_point kan een string zijn die de mount-locatie benoemt, of een eerder gemount bestandssysteemobject. Tijdens het unmount-proces wordt de methode umount() op het bestandssysteemobject aangeroepen.

Werpt OSError(EINVAL) op als mount_point niet wordt gevonden.

class os.VfsFat(block_dev: AbstractBlockDev)

Maak een bestandssysteemobject aan dat de FAT-bestandssysteemindeling gebruikt. De opslag van het FAT-bestandssysteem wordt geleverd door block_dev. Objecten die door deze constructor worden aangemaakt, kunnen worden gemount met mount().

static mkfs(block_dev: AbstractBlockDev) None

Bouw een FAT-bestandssysteem op block_dev.

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

Maak een bestandssysteemobject aan dat toegang geeft tot het POSIX-bestandssysteem van de host. Als root is opgegeven, moet het een pad in het host-bestandssysteem zijn dat als root van het VfsPosix-object wordt gebruikt. Anders wordt de huidige map van het host-bestandssysteem gebruikt.

Notitie

VfsPosix is alleen beschikbaar op de Unix-port; het is niet aanwezig op de OpenMV Cam.