os — základní služby „operačního systému“

Modul os obsahuje funkce pro přístup k souborovému systému a jeho připojení, přesměrování a duplikaci terminálu a funkce uname a urandom.

Obecné funkce

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

Vrátí n-tici (případně pojmenovanou n-tici) obsahující informace o podkladovém zařízení a/nebo jeho operačním systému. N-tice má pět polí v následujícím pořadí, z nichž každé je řetězec:

  • sysname – Název podkladového systému

  • nodename – Síťový název (může být stejný jako sysname)

  • release – Verze podkladového systému

  • version – Verze MicroPython a datum sestavení

  • machine – Identifikátor podkladového hardwaru (např. deska, CPU)

os.urandom(n: int) bytes

Vrátí objekt bytes s n náhodnými byty. Zdroj je kryptograficky vhodný na každé podporované kameře, i když se implementace liší podle portu:

  • STM32 kamery (M4, M7, H7, H7+, PT, N6) používají hardwarovou periferii RNG čipu STM32.

  • i.MX RT1062 kamery (RT1060) používají hardwarový TRNG čipu.

  • Alif Ensemble kamery (AE3) používají hardwarovou službu náhodných čísel Secure Enclave.

  • Arduino Nano 33 BLE Sense používá hardwarovou periferii RNG čipu nRF52.

  • Arduino Nano RP2040 Connect nemá žádný hardwarový TRNG; PRNG z pico-sdk je inicializován a průběžně přimíchávaný se zdroji entropie na čipu RP2040.

Přístup k souborovému systému

os.chdir(path: str) None

Změní aktuální adresář.

os.getcwd() str

Získá aktuální adresář.

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

Tato funkce vrací iterátor, který poté generuje n-tice odpovídající položkám v adresáři, který vypisuje. Bez argumentu vypíše aktuální adresář, jinak vypíše adresář zadaný v dir.

N-tice mají tvar (name, type, inode[, size]):

  • name je řetězec (nebo bytes, pokud je dir objekt bytes) a je názvem položky;

  • type je celé číslo, které určuje typ položky, kde 0x4000 značí adresáře a 0x8000 běžné soubory;

  • inode je celé číslo odpovídající inodu souboru a může být 0 u souborových systémů, které takový pojem nemají.

  • size je celé číslo, které může být zahrnuto v závislosti na typu souborového systému. U položek souborů size představuje velikost souboru nebo -1, pokud není známa. Jeho význam je u položek adresářů aktuálně nedefinovaný.

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

Bez argumentu vypíše aktuální adresář. Jinak vypíše zadaný adresář.

os.mkdir(path: str) None

Vytvoří nový adresář.

os.remove(path: str) None

Odstraní soubor.

Odstraní soubor. Toto je alias pro remove().

os.rmdir(path: str) None

Odstraní adresář.

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

Přejmenuje soubor.

os.stat(path: str) Tuple

Získá stav souboru nebo adresáře.

os.statvfs(path: str) Tuple

Získá stav souborového systému.

Vrátí n-tici s informacemi o souborovém systému v následujícím pořadí:

  • f_bsize – Velikost bloku souborového systému

  • f_frsize – Velikost fragmentu

  • f_blocks – Velikost souborového systému v jednotkách f_frsize

  • f_bfree – Počet volných bloků

  • f_bavail – Počet volných bloků pro neprivilegované uživatele

  • f_files – Počet inodů

  • f_ffree – Počet volných inodů

  • f_favail – Počet volných inodů pro neprivilegované uživatele

  • f_flag – Příznaky připojení

  • f_namemax – Maximální délka názvu souboru

Parametry týkající se inodů: f_files, f_ffree, f_favail a parametr f_flag mohou vrátit 0, protože nemusí být dostupné v implementaci specifické pro daný port.

os.sync() None

Synchronizuje všechny souborové systémy.

os.sep: str

Oddělovač komponent cesty používaný souborovým systémem, řetězec '/'.

Přesměrování a duplikace terminálu

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

Duplikuje nebo přepne terminál MicroPython (REPL) na zadaný objekt podobný stream. Argument stream_object musí být nativní stream objekt nebo musí být odvozen od io.IOBase a implementovat metody readinto() a write(). Stream by měl být v neblokujícím režimu a readinto() by měl vracet None, pokud nejsou k dispozici žádná data ke čtení.

Po zavolání této funkce se veškerý výstup terminálu opakuje na tomto streamu a jakýkoli vstup dostupný na streamu je předán na vstup terminálu.

Parametr index by měl být nezáporné celé číslo a určuje, který duplikační slot je nastaven. Daný port může implementovat více než jeden slot (slot 0 bude vždy dostupný) a v takovém případě je vstup a výstup terminálu duplikován na všech nastavených slotech.

Pokud je jako stream_object předáno None, je duplikace na slotu zadaném v index zrušena.

Funkce vrací předchozí objekt podobný streamu v daném slotu.

os.dupterm_notify(obj_in: Any, /) None

Oznámí REPL MicroPython, že je na objektu podobném streamu, dříve registrovaném přes os.dupterm(), k dispozici vstup.

Tato funkce by měla být volána vlastními implementacemi streamu (např. UART, Bluetooth nebo jiné REPL streamy mimo USB) k informování REPL, že je vstup připraven ke čtení. Správné použití zajišťuje, že speciální znaky jako Ctrl+C (používaný k vyvolání KeyboardInterrupt) jsou REPL zpracovány bezodkladně, což umožňuje očekávané chování přerušení pro uživatelský kód.

Parametr obj_in je funkcí os.dupterm_notify() ignorován, ale je vyžadován, aby bylo možné volat dupterm_notify z obsluhy přerušení, jako je UART.irq().

Příklad:

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

Poznámka

Pokud není funkce dupterm_notify() zavolána, vstup z vlastního streamu nemusí být detekován nebo zpracován až do dalšího dotazování REPL, což může zpozdit KeyboardInterrupty nebo jiné řídicí signály. To je obzvláště důležité u UART, Bluetooth a jiných nestandardních REPL připojení, kde není automatické oznamování zaručeno.

Připojení souborového systému

Následující funkce a třídy byly přesunuty do modulu vfs. V tomto modulu jsou poskytovány pouze kvůli zpětné kompatibilitě a budou odstraněny ve verzi 2 MicroPython.

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

Připojí objekt souborového systému fsobj na umístění ve VFS zadané řetězcem mount_point. fsobj může být VFS objekt, který má metodu mount(), nebo blokové zařízení. Pokud jde o blokové zařízení, typ souborového systému je automaticky detekován (pokud není rozpoznán žádný souborový systém, je vyvolána výjimka). mount_point může být '/' pro připojení fsobj ke kořeni, nebo '/<name>' pro připojení do podadresáře pod kořenem.

Pokud je readonly True, je souborový systém připojen pouze pro čtení.

Během procesu připojování je na objektu souborového systému volána metoda mount().

Vyvolá OSError(EPERM), pokud je mount_point již připojen.

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

Bez argumentů mount() vrátí seznam n-tic představujících všechny aktivní body připojení.

Vrácený seznam má tvar [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Odpojí souborový systém. mount_point může být řetězec pojmenovávající umístění připojení, nebo dříve připojený objekt souborového systému. Během procesu odpojování je na objektu souborového systému volána metoda umount().

Vyvolá OSError(EINVAL), pokud mount_point není nalezen.

class os.VfsFat(block_dev: AbstractBlockDev)

Vytvoří objekt souborového systému, který používá formát souborového systému FAT. Úložiště souborového systému FAT poskytuje block_dev. Objekty vytvořené tímto konstruktorem lze připojit pomocí mount().

static mkfs(block_dev: AbstractBlockDev) None

Vytvoří souborový systém FAT na block_dev.

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

Vytvoří objekt souborového systému, který přistupuje k hostitelskému POSIX souborovému systému. Pokud je zadán root, měla by to být cesta v hostitelském souborovém systému, která se použije jako kořen objektu VfsPosix. Jinak se použije aktuální adresář hostitelského souborového systému.

Poznámka

VfsPosix je dostupný pouze na Unix portu; na OpenMV Cam není přítomen.