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.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.statvfs(path: str) Tuple¶
Получает статус файловой системы.
Возвращает кортеж с информацией о файловой системе в следующем порядке:
f_bsize— размер блока файловой системыf_frsize— размер фрагментаf_blocks— размер фс в единицах f_frsizef_bfree— количество свободных блоковf_bavail— количество свободных блоков для непривилегированных пользователейf_files— количество inodef_ffree— количество свободных inodef_favail— количество свободных inode для непривилегированных пользователейf_flag— флаги монтированияf_namemax— максимальная длина имени файла
Параметры, связанные с inode:
f_files,f_ffree,f_favailи параметрf_flagмогут возвращать0, так как они могут быть недоступны в реализации, специфичной для порта.
Перенаправление и дублирование терминала¶
- 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.