os — alapvető „operációs rendszer” szolgáltatások

Az os modul a fájlrendszer-hozzáférést és -csatolást, a terminál átirányítását és duplikálását, valamint az uname és urandom függvényeket tartalmazza.

Általános függvények

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

Egy olyan tuple-t (esetleg egy névvel ellátott tuple-t) ad vissza, amely információkat tartalmaz a mögöttes gépről és/vagy annak operációs rendszeréről. A tuple öt mezőt tartalmaz a következő sorrendben, mindegyik egy karakterlánc:

  • sysname – A mögöttes rendszer neve

  • nodename – A hálózati név (lehet azonos a sysname értékkel)

  • release – A mögöttes rendszer verziója

  • version – A MicroPython verziója és a fordítás dátuma

  • machine – A mögöttes hardver azonosítója (pl. kártya, CPU)

os.urandom(n: int) bytes

Egy bytes objektumot ad vissza n darab véletlen bájttal. A forrás minden támogatott kamerán kriptográfiailag megfelelő, bár a megvalósítás portonként eltér:

  • STM32 kamerák (M4, M7, H7, H7+, PT, N6) az STM32 hardveres RNG perifériáját használják.

  • i.MX RT1062 kamerák (RT1060) a chip hardveres TRNG-jét használják.

  • Alif Ensemble kamerák (AE3) a Secure Enclave hardveres véletlenszám-szolgáltatását használják.

  • Arduino Nano 33 BLE Sense az nRF52 hardveres RNG perifériáját használja.

  • Arduino Nano RP2040 Connect nem rendelkezik hardveres TRNG-vel; a pico-sdk PRNG kezdőértéket kap, és folyamatosan újrakeveredik az RP2040 chipen belüli entrópiaforrásaival.

Fájlrendszer-hozzáférés

os.chdir(path: str) None

Az aktuális könyvtár megváltoztatása.

os.getcwd() str

Az aktuális könyvtár lekérése.

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

Ez a függvény egy iterátort ad vissza, amely a felsorolt könyvtár bejegyzéseinek megfelelő tuple-okat szolgáltat. Argumentum nélkül az aktuális könyvtárat listázza, egyébként a dir által megadott könyvtárat.

A tuple-ok formája (name, type, inode[, size]):

  • A name egy karakterlánc (vagy bytes, ha a dir egy bytes objektum), és a bejegyzés neve;

  • A type egy egész szám, amely a bejegyzés típusát adja meg: 0x4000 a könyvtárakhoz és 0x8000 a szabályos fájlokhoz;

  • Az inode egy egész szám, amely a fájl inode-jának felel meg, és 0 lehet az olyan fájlrendszereknél, amelyeknek nincs ilyen fogalmuk.

  • A size egy egész szám, amely a fájlrendszer típusától függően szerepelhet. Fájlbejegyzéseknél a size a fájl méretét jelenti, vagy -1, ha ismeretlen. Könyvtárbejegyzések esetén a jelentése jelenleg meghatározatlan.

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

Argumentum nélkül az aktuális könyvtárat listázza. Egyébként a megadott könyvtárat listázza.

os.mkdir(path: str) None

Új könyvtár létrehozása.

os.remove(path: str) None

Fájl eltávolítása.

Fájl eltávolítása. Ez a remove() aliasa.

os.rmdir(path: str) None

Könyvtár eltávolítása.

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

Fájl átnevezése.

os.stat(path: str) Tuple

Egy fájl vagy könyvtár állapotának lekérése.

os.statvfs(path: str) Tuple

Egy fájlrendszer állapotának lekérése.

Egy tuple-t ad vissza a fájlrendszer adataival a következő sorrendben:

  • f_bsize – A fájlrendszer blokkmérete

  • f_frsize – Töredékméret

  • f_blocks – A fájlrendszer mérete f_frsize egységekben

  • f_bfree – A szabad blokkok száma

  • f_bavail – A szabad blokkok száma a nem privilegizált felhasználók számára

  • f_files – Az inode-ok száma

  • f_ffree – A szabad inode-ok száma

  • f_favail – A szabad inode-ok száma a nem privilegizált felhasználók számára

  • f_flag – Csatolási jelzők

  • f_namemax – Maximális fájlnévhossz

Az inode-okkal kapcsolatos paraméterek: az f_files, f_ffree, f_favail és az f_flag paraméter 0 értéket adhat vissza, mivel ezek egy portspecifikus megvalósításban nem feltétlenül elérhetők.

os.sync() None

Az összes fájlrendszer szinkronizálása.

os.sep: str

A fájlrendszer által használt útvonal-komponens elválasztó, a '/' karakterlánc.

Terminál átirányítása és duplikálása

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

A MicroPython terminál (a REPL) duplikálása vagy átkapcsolása a megadott stream-szerű objektumra. A stream_object argumentumnak natív stream objektumnak kell lennie, vagy az io.IOBase osztályból kell származnia és meg kell valósítania a readinto() és write() metódusokat. A streamnek nem blokkoló módban kell lennie, és a readinto() None értéket kell, hogy visszaadjon, ha nincs olvasásra rendelkezésre álló adat.

A függvény meghívása után minden terminálkimenet megismétlődik ezen a streamen, és a streamen rendelkezésre álló bármely bemenet továbbítódik a terminál bemenetére.

Az index paraméternek nemnegatív egész számnak kell lennie, és megadja, hogy melyik duplikációs hely kerül beállításra. Egy adott port több helyet is megvalósíthat (a 0-s hely mindig elérhető), és ebben az esetben a terminál bemenete és kimenete az összes beállított helyen duplikálódik.

Ha None kerül átadásra stream_object gyanánt, akkor a duplikáció megszűnik az index által megadott helyen.

A függvény az adott helyen lévő korábbi stream-szerű objektumot adja vissza.

os.dupterm_notify(obj_in: Any, /) None

Értesíti a MicroPython REPL-t, hogy bemenet áll rendelkezésre egy korábban a os.dupterm() segítségével regisztrált stream-szerű objektumon.

Ezt a függvényt egyéni stream-megvalósításoknak (pl. UART, Bluetooth vagy más, nem USB alapú REPL streamek) kell meghívniuk, hogy értesítsék a REPL-t, hogy a bemenet olvasásra kész. A helyes használat biztosítja, hogy az olyan speciális karaktereket, mint a Ctrl+C (amely a KeyboardInterrupt kiváltására szolgál), a REPL azonnal feldolgozza, lehetővé téve a felhasználói kód várt megszakítási viselkedését.

Az obj_in paramétert a os.dupterm_notify() figyelmen kívül hagyja, de szükséges ahhoz, hogy a dupterm_notify meghívható legyen egy megszakításkezelőből, például a UART.irq()-ből.

Példa:

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

Megjegyzés

Ha a dupterm_notify() függvény nem hívódik meg, az egyéni streamről érkező bemenet előfordulhat, hogy nem érzékelődik vagy nem dolgozódik fel a következő REPL lekérdezésig, ami potenciálisan késleltetheti a KeyboardInterruptokat vagy más vezérlőjeleket. Ez különösen fontos UART, Bluetooth és más, nem szabványos REPL kapcsolatok esetén, ahol az automatikus értesítés nem garantált.

Fájlrendszer-csatolás

A következő függvények és osztályok átkerültek a vfs modulba. Ebben a modulban csak a visszamenőleges kompatibilitás érdekében maradnak elérhetők, és a MicroPython 2-es verziójában el lesznek távolítva.

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

Az fsobj fájlrendszer-objektum csatolása a VFS-ben a mount_point karakterlánc által megadott helyre. Az fsobj lehet egy VFS objektum, amelynek van mount() metódusa, vagy egy blokkeszköz. Ha blokkeszköz, akkor a fájlrendszer típusa automatikusan érzékelődik (kivétel váltódik ki, ha nem ismerhető fel fájlrendszer). A mount_point lehet '/' az fsobj gyökérbe csatolásához, vagy '/<name>' egy, a gyökér alatti alkönyvtárba való csatoláshoz.

Ha a readonly értéke True, akkor a fájlrendszer csak olvashatóként csatolódik.

A csatolási folyamat során a fájlrendszer-objektumon meghívódik a mount() metódus.

OSError(EPERM) kivételt vált ki, ha a mount_point már csatolva van.

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

A mount() argumentum nélküli hívása az összes aktív csatolási pontot reprezentáló tuple-ok listáját adja vissza.

A visszaadott lista formája [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Egy fájlrendszer leválasztása. A mount_point lehet egy karakterlánc, amely a csatolási helyet nevezi meg, vagy egy korábban csatolt fájlrendszer-objektum. A leválasztási folyamat során a fájlrendszer-objektumon meghívódik az umount() metódus.

OSError(EINVAL) kivételt vált ki, ha a mount_point nem található.

class os.VfsFat(block_dev: AbstractBlockDev)

Létrehoz egy fájlrendszer-objektumot, amely a FAT fájlrendszer-formátumot használja. A FAT fájlrendszer tárolását a block_dev biztosítja. Az ezzel a konstruktorral létrehozott objektumok a mount() segítségével csatolhatók.

static mkfs(block_dev: AbstractBlockDev) None

FAT fájlrendszer felépítése a block_dev eszközön.

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

Létrehoz egy fájlrendszer-objektumot, amely a gazda POSIX fájlrendszerét éri el. Ha a root meg van adva, akkor egy elérési útnak kell lennie a gazda fájlrendszerében, amelyet a VfsPosix objektum gyökereként használ. Ellenkező esetben a gazda fájlrendszerének aktuális könyvtára kerül felhasználásra.

Megjegyzés

A VfsPosix csak a Unix porton érhető el; az OpenMV Cam-en nincs jelen.