os — podstawowe usługi „systemu operacyjnego”

Moduł os zawiera funkcje umożliwiające dostęp do systemu plików i jego montowanie, przekierowanie i duplikowanie terminala oraz funkcje uname i urandom.

Funkcje ogólne

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

Zwraca krotkę (być może krotkę nazwaną) zawierającą informacje o podstawowym sprzęcie i/lub jego systemie operacyjnym. Krotka ma pięć pól w następującej kolejności, z których każde jest łańcuchem znaków:

  • sysname – nazwa systemu bazowego

  • nodename – nazwa sieciowa (może być taka sama jak sysname)

  • release – wersja systemu bazowego

  • version – wersja MicroPython oraz data kompilacji

  • machine – identyfikator sprzętu bazowego (np. płytka, CPU)

os.urandom(n: int) bytes

Zwraca obiekt bytes zawierający n losowych bajtów. Źródło jest odpowiednie kryptograficznie na każdej obsługiwanej kamerze, choć implementacja różni się w zależności od portu:

  • Kamery STM32 (M4, M7, H7, H7+, PT, N6) używają sprzętowego peryferyjnego generatora RNG STM32.

  • Kamery i.MX RT1062 (RT1060) używają sprzętowego TRNG układu.

  • Kamery Alif Ensemble (AE3) używają sprzętowej usługi losowości Secure Enclave.

  • Arduino Nano 33 BLE Sense używa sprzętowego peryferyjnego generatora RNG nRF52.

  • Arduino Nano RP2040 Connect nie ma sprzętowego TRNG; PRNG z pico-sdk jest inicjalizowany ziarnem i nieustannie ponownie miksowany ze źródłami entropii wbudowanymi w układ RP2040.

Dostęp do systemu plików

os.chdir(path: str) None

Zmienia bieżący katalog.

os.getcwd() str

Pobiera bieżący katalog.

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

Funkcja ta zwraca iterator, który następnie zwraca krotki odpowiadające pozycjom w wyświetlanym katalogu. Bez argumentu wyświetla bieżący katalog, w przeciwnym razie wyświetla katalog podany w dir.

Krotki mają postać (name, type, inode[, size]):

  • name to łańcuch znaków (lub bajty, jeśli dir jest obiektem bytes) i jest nazwą pozycji;

  • type to liczba całkowita określająca typ pozycji, gdzie 0x4000 oznacza katalogi, a 0x8000 zwykłe pliki;

  • inode to liczba całkowita odpowiadająca i-węzłowi pliku i może wynosić 0 w przypadku systemów plików, które nie posiadają takiego pojęcia.

  • size to liczba całkowita, która może być uwzględniona w zależności od typu systemu plików. W przypadku pozycji plikowych size oznacza rozmiar pliku lub -1, jeśli jest nieznany. Jego znaczenie jest obecnie niezdefiniowane dla pozycji katalogowych.

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

Bez argumentu wyświetla bieżący katalog. W przeciwnym razie wyświetla podany katalog.

os.mkdir(path: str) None

Tworzy nowy katalog.

os.remove(path: str) None

Usuwa plik.

Usuwa plik. Jest to alias dla remove().

os.rmdir(path: str) None

Usuwa katalog.

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

Zmienia nazwę pliku.

os.stat(path: str) Tuple

Pobiera stan pliku lub katalogu.

os.statvfs(path: str) Tuple

Pobiera stan systemu plików.

Zwraca krotkę z informacjami o systemie plików w następującej kolejności:

  • f_bsize – rozmiar bloku systemu plików

  • f_frsize – rozmiar fragmentu

  • f_blocks – rozmiar systemu plików w jednostkach f_frsize

  • f_bfree – liczba wolnych bloków

  • f_bavail – liczba wolnych bloków dla użytkowników bez uprawnień

  • f_files – liczba i-węzłów

  • f_ffree – liczba wolnych i-węzłów

  • f_favail – liczba wolnych i-węzłów dla użytkowników bez uprawnień

  • f_flag – flagi montowania

  • f_namemax – maksymalna długość nazwy pliku

Parametry związane z i-węzłami: f_files, f_ffree, f_favail oraz parametr f_flag mogą zwracać 0, ponieważ mogą być niedostępne w implementacji specyficznej dla danego portu.

os.sync() None

Synchronizuje wszystkie systemy plików.

os.sep: str

Separator komponentów ścieżki używany przez system plików, czyli łańcuch '/'.

Przekierowanie i duplikowanie terminala

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

Duplikuje lub przełącza terminal MicroPython (REPL) na podany obiekt typu stream. Argument stream_object musi być natywnym obiektem strumienia lub dziedziczyć po io.IOBase i implementować metody readinto() oraz write(). Strumień powinien być w trybie nieblokującym, a readinto() powinno zwracać None, jeśli nie ma dostępnych danych do odczytu.

Po wywołaniu tej funkcji całe wyjście terminala jest powtarzane na tym strumieniu, a wszelkie dane wejściowe dostępne w strumieniu są przekazywane na wejście terminala.

Parametr index powinien być nieujemną liczbą całkowitą i określa, który slot duplikacji jest ustawiany. Dany port może implementować więcej niż jeden slot (slot 0 będzie zawsze dostępny), a w takim przypadku wejście i wyjście terminala są duplikowane na wszystkich ustawionych slotach.

Jeśli jako stream_object zostanie przekazane None, duplikacja na slocie podanym w index zostaje anulowana.

Funkcja zwraca poprzedni obiekt typu strumień znajdujący się w danym slocie.

os.dupterm_notify(obj_in: Any, /) None

Powiadamia REPL MicroPython, że dostępne są dane wejściowe na obiekcie typu strumień zarejestrowanym wcześniej za pomocą os.dupterm().

Funkcja ta powinna być wywoływana przez niestandardowe implementacje strumieni (np. UART, Bluetooth lub inne strumienie REPL inne niż USB), aby poinformować REPL, że dane wejściowe są gotowe do odczytu. Prawidłowe użycie zapewnia, że znaki specjalne, takie jak Ctrl+C (używany do wywołania KeyboardInterrupt), są niezwłocznie przetwarzane przez REPL, co umożliwia oczekiwane zachowanie przerywania kodu użytkownika.

Parametr obj_in jest ignorowany przez os.dupterm_notify(), ale jest wymagany, aby umożliwić wywołanie dupterm_notify z procedury obsługi przerwania, takiej jak UART.irq().

Przykład:

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

Informacja

Jeśli funkcja dupterm_notify() nie zostanie wywołana, dane wejściowe z niestandardowego strumienia mogą nie zostać wykryte ani przetworzone aż do następnego odpytania REPL, co może opóźnić wystąpienie KeyboardInterrupt lub innych sygnałów sterujących. Jest to szczególnie ważne w przypadku UART, Bluetooth i innych niestandardowych połączeń REPL, gdzie automatyczne powiadamianie nie jest gwarantowane.

Montowanie systemu plików

Następujące funkcje i klasy zostały przeniesione do modułu vfs. Są one dostępne w tym module wyłącznie ze względu na zgodność wsteczną i zostaną usunięte w wersji 2 MicroPython.

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

Montuje obiekt systemu plików fsobj w lokalizacji VFS podanej w łańcuchu mount_point. fsobj może być obiektem VFS posiadającym metodę mount() lub urządzeniem blokowym. Jeśli jest to urządzenie blokowe, typ systemu plików jest wykrywany automatycznie (zgłaszany jest wyjątek, jeśli nie rozpoznano żadnego systemu plików). mount_point może mieć wartość '/', aby zamontować fsobj w katalogu głównym, lub '/<name>', aby zamontować go w podkatalogu pod katalogiem głównym.

Jeśli readonly ma wartość True, system plików jest montowany tylko do odczytu.

Podczas procesu montowania na obiekcie systemu plików wywoływana jest metoda mount().

Zgłosi OSError(EPERM), jeśli mount_point jest już zamontowany.

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

Bez argumentów mount() zwraca listę krotek reprezentujących wszystkie aktywne punkty montowania.

Zwrócona lista ma postać [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Odmontowuje system plików. mount_point może być łańcuchem nazywającym lokalizację montowania lub wcześniej zamontowanym obiektem systemu plików. Podczas procesu odmontowywania na obiekcie systemu plików wywoływana jest metoda umount().

Zgłosi OSError(EINVAL), jeśli mount_point nie zostanie znaleziony.

class os.VfsFat(block_dev: AbstractBlockDev)

Tworzy obiekt systemu plików używający formatu systemu plików FAT. Magazyn systemu plików FAT zapewnia block_dev. Obiekty utworzone przez ten konstruktor można zamontować za pomocą mount().

static mkfs(block_dev: AbstractBlockDev) None

Buduje system plików FAT na block_dev.

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

Tworzy obiekt systemu plików, który uzyskuje dostęp do systemu plików POSIX hosta. Jeśli podano root, powinna to być ścieżka w systemie plików hosta, która ma być używana jako katalog główny obiektu VfsPosix. W przeciwnym razie używany jest bieżący katalog systemu plików hosta.

Informacja

VfsPosix jest dostępny tylko na porcie Unix; nie występuje na OpenMV Cam.