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 bazowegonodename– nazwa sieciowa (może być taka sama jaksysname)release– wersja systemu bazowegoversion– wersja MicroPython oraz data kompilacjimachine– 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.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.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ówf_frsize– rozmiar fragmentuf_blocks– rozmiar systemu plików w jednostkach f_frsizef_bfree– liczba wolnych blokówf_bavail– liczba wolnych bloków dla użytkowników bez uprawnieńf_files– liczba i-węzłówf_ffree– liczba wolnych i-węzłówf_favail– liczba wolnych i-węzłów dla użytkowników bez uprawnieńf_flag– flagi montowaniaf_namemax– maksymalna długość nazwy pliku
Parametry związane z i-węzłami:
f_files,f_ffree,f_favailoraz parametrf_flagmogą zwracać0, ponieważ mogą być niedostępne w implementacji specyficznej dla danego portu.
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.IOBasei implementować metodyreadinto()orazwrite(). Strumień powinien być w trybie nieblokującym, areadinto()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 jakUART.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
VfsPosixjest dostępny tylko na porcie Unix; nie występuje na OpenMV Cam.