os — базовые сервисы «операционной системы»

Модуль os содержит функции для доступа к файловой системе и её монтирования, перенаправления и дублирования терминала, а также функции uname и urandom.

Общие функции

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

Возвращает кортеж (возможно, именованный), содержащий информацию о базовой машине и/или её операционной системе. Кортеж имеет пять полей в следующем порядке, каждое из которых является строкой:

  • sysname — имя базовой системы

  • nodename — сетевое имя (может совпадать с sysname)

  • release — версия базовой системы

  • version — версия MicroPython и дата сборки

  • machine — идентификатор базового оборудования (например, платы, ЦП)

os.urandom(n: int) bytes

Возвращает объект bytes с n случайными байтами. Источник криптографически пригоден на всех поддерживаемых камерах, хотя реализация различается в зависимости от порта:

  • Камеры STM32 (M4, M7, H7, H7+, PT, N6) используют аппаратный модуль RNG STM32.

  • Камеры i.MX RT1062 (RT1060) используют аппаратный TRNG микросхемы.

  • Камеры Alif Ensemble (AE3) используют аппаратный сервис случайных чисел Secure Enclave.

  • Arduino Nano 33 BLE Sense использует аппаратный модуль RNG nRF52.

  • Arduino Nano RP2040 Connect не имеет аппаратного TRNG; PRNG из pico-sdk инициализируется начальным значением и непрерывно перемешивается с источниками энтропии RP2040 на кристалле.

Доступ к файловой системе

os.chdir(path: str) None

Изменяет текущий каталог.

os.getcwd() str

Получает текущий каталог.

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

Эта функция возвращает итератор, который затем выдаёт кортежи, соответствующие записям перечисляемого каталога. Без аргумента она перечисляет текущий каталог, иначе — каталог, заданный dir.

Кортежи имеют вид (name, type, inode[, size]):

  • name — строка (или bytes, если dir является объектом bytes) и представляет имя записи;

  • type — целое число, указывающее тип записи: 0x4000 для каталогов и 0x8000 для обычных файлов;

  • inode — целое число, соответствующее inode файла, и может быть 0 для файловых систем, не имеющих такого понятия.

  • size — целое число, которое может быть включено в зависимости от типа файловой системы. Для записей файлов size представляет размер файла или -1, если он неизвестен. Его значение для записей каталогов в настоящее время не определено.

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

Без аргумента перечисляет текущий каталог. В противном случае перечисляет указанный каталог.

os.mkdir(path: str) None

Создаёт новый каталог.

os.remove(path: str) None

Удаляет файл.

Удаляет файл. Это псевдоним для remove().

os.rmdir(path: str) None

Удаляет каталог.

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

Переименовывает файл.

os.stat(path: str) Tuple

Получает статус файла или каталога.

os.statvfs(path: str) Tuple

Получает статус файловой системы.

Возвращает кортеж с информацией о файловой системе в следующем порядке:

  • f_bsize — размер блока файловой системы

  • f_frsize — размер фрагмента

  • f_blocks — размер фс в единицах f_frsize

  • f_bfree — количество свободных блоков

  • f_bavail — количество свободных блоков для непривилегированных пользователей

  • f_files — количество inode

  • f_ffree — количество свободных inode

  • f_favail — количество свободных inode для непривилегированных пользователей

  • f_flag — флаги монтирования

  • f_namemax — максимальная длина имени файла

Параметры, связанные с inode: f_files, f_ffree, f_favail и параметр f_flag могут возвращать 0, так как они могут быть недоступны в реализации, специфичной для порта.

os.sync() None

Синхронизирует все файловые системы.

os.sep: str

Разделитель компонентов пути, используемый файловой системой, строка '/'.

Перенаправление и дублирование терминала

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

Дублирует или переключает терминал MicroPython (REPL) на указанный объект, подобный stream. Аргумент stream_object должен быть нативным объектом потока или производным от io.IOBase и реализовывать методы readinto() и write(). Поток должен быть в неблокирующем режиме, и readinto() должен возвращать None, если данные для чтения недоступны.

После вызова этой функции весь вывод терминала повторяется в этот поток, а любой ввод, доступный в потоке, передаётся на вход терминала.

Параметр index должен быть неотрицательным целым числом и указывает, какой слот дублирования устанавливается. Конкретный порт может реализовывать более одного слота (слот 0 всегда доступен), и в этом случае ввод и вывод терминала дублируются на всех установленных слотах.

Если в качестве stream_object передаётся None, то дублирование на слоте, заданном index, отменяется.

Функция возвращает предыдущий объект, подобный потоку, в указанном слоте.

os.dupterm_notify(obj_in: Any, /) None

Уведомляет REPL MicroPython о том, что во входном потоке, подобном потоку и ранее зарегистрированном через os.dupterm(), доступны данные.

Эта функция должна вызываться пользовательскими реализациями потоков (например, UART, Bluetooth или другими REPL-потоками, отличными от USB), чтобы сообщить REPL о готовности входных данных к чтению. Правильное использование гарантирует, что специальные символы, такие как Ctrl+C (используемый для запуска KeyboardInterrupt), обрабатываются REPL быстро, обеспечивая ожидаемое поведение прерывания для пользовательского кода.

Параметр obj_in игнорируется функцией os.dupterm_notify(), но требуется для возможности вызова dupterm_notify из обработчика прерывания, такого как UART.irq().

Пример:

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

Примечание

Если функция dupterm_notify() не вызывается, ввод из пользовательского потока может не обнаруживаться или не обрабатываться до следующего опроса REPL, что потенциально задерживает KeyboardInterrupt или другие управляющие сигналы. Это особенно важно для UART, Bluetooth и других нестандартных подключений REPL, где автоматическое уведомление не гарантируется.

Монтирование файловой системы

Следующие функции и классы были перемещены в модуль vfs. Они предоставляются в этом модуле только для обратной совместимости и будут удалены в версии 2 MicroPython.

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

Монтирует объект файловой системы fsobj в месте VFS, заданном строкой mount_point. fsobj может быть объектом VFS, имеющим метод mount(), или блочным устройством. Если это блочное устройство, то тип файловой системы определяется автоматически (возбуждается исключение, если файловая система не распознана). mount_point может быть '/' для монтирования fsobj в корень или '/<name>' для монтирования в подкаталог под корнем.

Если readonly равно True, то файловая система монтируется только для чтения.

В процессе монтирования у объекта файловой системы вызывается метод mount().

Возбуждает OSError(EPERM), если mount_point уже смонтирован.

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

Без аргументов mount() возвращает список кортежей, представляющих все активные точки монтирования.

Возвращаемый список имеет вид [(fsobj, mount_point), …].

os.umount(mount_point: str | Any) None

Размонтирует файловую систему. mount_point может быть строкой, именующей место монтирования, или ранее смонтированным объектом файловой системы. В процессе размонтирования у объекта файловой системы вызывается метод umount().

Возбуждает OSError(EINVAL), если mount_point не найден.

class os.VfsFat(block_dev: AbstractBlockDev)

Создаёт объект файловой системы, использующий формат файловой системы FAT. Хранилище файловой системы FAT предоставляется block_dev. Объекты, созданные этим конструктором, можно монтировать с помощью mount().

static mkfs(block_dev: AbstractBlockDev) None

Создаёт файловую систему FAT на block_dev.

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

Создаёт объект файловой системы, обращающийся к файловой системе POSIX хоста. Если указан root, то это должен быть путь в файловой системе хоста, используемый как корень объекта VfsPosix. В противном случае используется текущий каталог файловой системы хоста.

Примечание

VfsPosix доступен только на Unix-порте; он отсутствует на OpenMV Cam.