os — perustason ”käyttöjärjestelmä”-palvelut

os-moduuli sisältää funktioita tiedostojärjestelmän käyttöön ja liittämiseen, päätteen uudelleenohjaukseen ja monistamiseen sekä uname- ja urandom-funktiot.

Yleiset funktiot

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

Palauttaa monikon (mahdollisesti nimetyn monikon), joka sisältää tietoa taustalla olevasta koneesta ja/tai sen käyttöjärjestelmästä. Monikossa on viisi kenttää seuraavassa järjestyksessä, kukin niistä merkkijono:

  • sysname – Taustalla olevan järjestelmän nimi

  • nodename – Verkkonimi (voi olla sama kuin sysname)

  • release – Taustalla olevan järjestelmän versio

  • version – MicroPython-versio ja käännöspäivämäärä

  • machine – Taustalla olevan laitteiston tunniste (esim. piirilevy, suoritin)

os.urandom(n: int) bytes

Palauttaa tavuolion, jossa on n satunnaista tavua. Lähde on kryptografisesti soveltuva jokaisella tuetulla kameralla, vaikkakin toteutus vaihtelee porttikohtaisesti:

  • STM32-kamerat (M4, M7, H7, H7+, PT, N6) käyttävät STM32:n laitteiston RNG-oheislaitetta.

  • i.MX RT1062 -kamerat (RT1060) käyttävät piirin laitteiston TRNG:tä.

  • Alif Ensemble -kamerat (AE3) käyttävät Secure Enclaven laitteiston satunnaislukupalvelua.

  • Arduino Nano 33 BLE Sense käyttää nRF52:n laitteiston RNG-oheislaitetta.

  • Arduino Nano RP2040 Connect -laitteessa ei ole laitteiston TRNG:tä; pico-sdk:n PRNG alustetaan siemenellä ja sekoitetaan jatkuvasti uudelleen RP2040:n sisäisillä entropialähteillä.

Tiedostojärjestelmän käyttö

os.chdir(path: str) None

Vaihtaa nykyistä hakemistoa.

os.getcwd() str

Palauttaa nykyisen hakemiston.

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

Tämä funktio palauttaa iteraattorin, joka tuottaa monikoita listaamansa hakemiston merkintöjä vastaten. Ilman argumenttia se listaa nykyisen hakemiston, muutoin se listaa dir-argumentin antaman hakemiston.

Monikot ovat muotoa (name, type, inode[, size]):

  • name on merkkijono (tai tavut, jos dir on tavuolio) ja se on merkinnän nimi;

  • type on kokonaisluku, joka määrittää merkinnän tyypin: 0x4000 hakemistoille ja 0x8000 tavallisille tiedostoille;

  • inode on kokonaisluku, joka vastaa tiedoston inodea, ja voi olla 0 tiedostojärjestelmissä, joissa ei ole tällaista käsitettä.

  • size on kokonaisluku, joka voidaan sisällyttää tiedostojärjestelmän tyypistä riippuen. Tiedostomerkinnöille size edustaa tiedoston kokoa tai -1, jos kokoa ei tiedetä. Sen merkitys hakemistomerkinnöille on tällä hetkellä määrittelemätön.

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

Ilman argumenttia listaa nykyisen hakemiston. Muutoin listaa annetun hakemiston.

os.mkdir(path: str) None

Luo uuden hakemiston.

os.remove(path: str) None

Poistaa tiedoston.

Poistaa tiedoston. Tämä on remove()-funktion alias.

os.rmdir(path: str) None

Poistaa hakemiston.

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

Nimeää tiedoston uudelleen.

os.stat(path: str) Tuple

Hakee tiedoston tai hakemiston tilatiedot.

os.statvfs(path: str) Tuple

Hakee tiedostojärjestelmän tilatiedot.

Palauttaa monikon, jossa on tiedostojärjestelmän tiedot seuraavassa järjestyksessä:

  • f_bsize – Tiedostojärjestelmän lohkokoko

  • f_frsize – Fragmentin koko

  • f_blocks – Tiedostojärjestelmän koko f_frsize-yksiköissä

  • f_bfree – Vapaiden lohkojen määrä

  • f_bavail – Vapaiden lohkojen määrä etuoikeudettomille käyttäjille

  • f_files – Inodejen määrä

  • f_ffree – Vapaiden inodejen määrä

  • f_favail – Vapaiden inodejen määrä etuoikeudettomille käyttäjille

  • f_flag – Liitoslput (mount flags)

  • f_namemax – Tiedostonimen enimmäispituus

Inodeihin liittyvät parametrit: f_files, f_ffree, f_favail ja f_flag-parametri voivat palauttaa arvon 0, koska ne voivat olla saatavilla porttikohtaisessa toteutuksessa.

os.sync() None

Synkronoi kaikki tiedostojärjestelmät.

os.sep: str

Tiedostojärjestelmän käyttämä polkukomponenttien erotin, merkkijono '/'.

Päätteen uudelleenohjaus ja monistaminen

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

Monistaa tai vaihtaa MicroPython-päätteen (REPL:n) annettuun stream-tyyppiseen olioon. stream_object-argumentin on oltava natiivi stream-olio, tai sen on perittävä io.IOBase ja toteutettava readinto()- ja write()-metodit. Streamin tulisi olla ei-estävässä tilassa, ja readinto() tulisi palauttaa None, jos luettavaa dataa ei ole.

Tämän funktion kutsumisen jälkeen kaikki päätteen tuloste toistetaan tähän streamiin, ja kaikki streamissa saatavilla oleva syöte välitetään päätteen syötteeseen.

index-parametrin tulisi olla ei-negatiivinen kokonaisluku, ja se määrittää, mikä monistuspaikka asetetaan. Tietty portti voi toteuttaa useamman kuin yhden paikan (paikka 0 on aina käytettävissä), jolloin päätteen syöte ja tuloste monistetaan kaikkiin asetettuihin paikkoihin.

Jos stream_object-argumentiksi annetaan None, monistus perutaan index-parametrin antamasta paikasta.

Funktio palauttaa annetussa paikassa aiemmin olleen stream-tyyppisen olion.

os.dupterm_notify(obj_in: Any, /) None

Ilmoittaa MicroPython REPL:lle, että syötettä on saatavilla aiemmin os.dupterm()-funktiolla rekisteröidyssä stream-tyyppisessä oliossa.

Tätä funktiota tulisi kutsua mukautetuista stream-toteutuksista (esim. UART, Bluetooth tai muut ei-USB-pohjaiset REPL-streamit), jotta REPL:lle ilmoitetaan, että syöte on valmiina luettavaksi. Asianmukainen käyttö varmistaa, että erikoismerkit kuten Ctrl+C (jolla laukaistaan KeyboardInterrupt) käsitellään REPL:ssä viipymättä, mahdollistaen odotetun keskeytyskäyttäytymisen käyttäjän koodille.

obj_in-parametria ei huomioida os.dupterm_notify()-funktiossa, mutta se vaaditaan, jotta dupterm_notify voidaan kutsua keskeytyskäsittelijästä kuten UART.irq().

Esimerkki:

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

Muista

Jos dupterm_notify()-funktiota ei kutsuta, mukautetun streamin syötettä ei välttämättä havaita tai käsitellä ennen seuraavaa REPL-kyselyä, mikä saattaa viivästyttää KeyboardInterrupt-keskeytyksiä tai muita ohjaussignaaleja. Tämä on erityisen tärkeää UART-, Bluetooth- ja muille epästandardeille REPL-yhteyksille, joissa automaattista ilmoitusta ei taata.

Tiedostojärjestelmän liittäminen

Seuraavat funktiot ja luokat on siirretty vfs-moduuliin. Ne tarjotaan tässä moduulissa vain taaksepäin yhteensopivuuden vuoksi, ja ne poistetaan MicroPythonin versiossa 2.

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

Liittää tiedostojärjestelmäolion fsobj VFS:n sijaintiin, jonka antaa mount_point-merkkijono. fsobj voi olla VFS-olio, jolla on mount()-metodi, tai lohkolaite. Jos se on lohkolaite, tiedostojärjestelmän tyyppi tunnistetaan automaattisesti (poikkeus nostetaan, jos yhtään tiedostojärjestelmää ei tunnisteta). mount_point voi olla '/', jolloin fsobj liitetään juureen, tai '/<name>', jolloin se liitetään juuren alla olevaan alihakemistoon.

Jos readonly on True, tiedostojärjestelmä liitetään vain luku -tilassa.

Liittämisprosessin aikana tiedostojärjestelmäoliolle kutsutaan mount()-metodi.

Nostaa OSError(EPERM)-poikkeuksen, jos mount_point on jo liitetty.

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

Ilman argumentteja mount() palauttaa listan monikoita, jotka edustavat kaikkia aktiivisia liitoskohtia.

Palautettu lista on muotoa [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Irrottaa tiedostojärjestelmän. mount_point voi olla liitossijainnin nimeävä merkkijono tai aiemmin liitetty tiedostojärjestelmäolio. Irrotusprosessin aikana tiedostojärjestelmäoliolle kutsutaan umount()-metodi.

Nostaa OSError(EINVAL)-poikkeuksen, jos mount_point-kohtaa ei löydy.

class os.VfsFat(block_dev: AbstractBlockDev)

Luo tiedostojärjestelmäolion, joka käyttää FAT-tiedostojärjestelmämuotoa. FAT-tiedostojärjestelmän tallennuksen tarjoaa block_dev. Tämän rakentajan luomat oliot voidaan liittää mount()-funktiolla.

static mkfs(block_dev: AbstractBlockDev) None

Rakentaa FAT-tiedostojärjestelmän block_dev-laitteelle.

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

Luo tiedostojärjestelmäolion, joka käyttää isäntäkoneen POSIX-tiedostojärjestelmää. Jos root annetaan, sen tulisi olla polku isäntäkoneen tiedostojärjestelmässä, jota käytetään VfsPosix-olion juurena. Muutoin käytetään isäntäkoneen tiedostojärjestelmän nykyistä hakemistoa.

Muista

VfsPosix on saatavilla vain Unix-portissa; sitä ei ole OpenMV Camissa.