os — servicios básicos del «sistema operativo»¶
El módulo os contiene funciones para el acceso y montaje del sistema de archivos, la redirección y duplicación del terminal, y las funciones uname y urandom.
Funciones generales¶
- os.uname() Tuple[str, str, str, str, str]¶
Devuelve una tupla (posiblemente una tupla con nombre) que contiene información sobre la máquina subyacente o su sistema operativo. La tupla tiene cinco campos en el siguiente orden, cada uno de ellos una cadena:
sysname– El nombre del sistema subyacentenodename– El nombre de red (puede ser el mismo quesysname)release– La versión del sistema subyacenteversion– La versión de MicroPython y la fecha de compilaciónmachine– Un identificador del hardware subyacente (p. ej. placa, CPU)
- os.urandom(n: int) bytes¶
Devuelve un objeto bytes con n bytes aleatorios. La fuente es criptográficamente adecuada en todas las cámaras compatibles, aunque la implementación varía según el port:
Las cámaras STM32 (M4, M7, H7, H7+, PT, N6) utilizan el periférico RNG por hardware del STM32.
Las cámaras i.MX RT1062 (RT1060) utilizan el TRNG por hardware del chip.
Las cámaras Alif Ensemble (AE3) utilizan el servicio de aleatorización por hardware del Secure Enclave.
La Arduino Nano 33 BLE Sense utiliza el periférico RNG por hardware del nRF52.
La Arduino Nano RP2040 Connect no tiene TRNG por hardware; el PRNG del pico-sdk se siembra y se vuelve a mezclar de forma continua con las fuentes de entropía integradas del RP2040.
Acceso al sistema de archivos¶
- os.ilistdir(dir: str | None = None) Iterator[Tuple]¶
Esta función devuelve un iterador que va produciendo tuplas correspondientes a las entradas del directorio que se está listando. Sin argumentos, lista el directorio actual; en caso contrario, lista el directorio indicado por dir.
Las tuplas tienen la forma (name, type, inode[, size]):
name es una cadena (o bytes si dir es un objeto bytes) y es el nombre de la entrada;
type es un entero que especifica el tipo de la entrada, con 0x4000 para directorios y 0x8000 para archivos normales;
inode es un entero correspondiente al inodo del archivo, y puede ser 0 en sistemas de archivos que no tienen tal concepto.
size es un entero que puede incluirse según el tipo de sistema de archivos. Para las entradas de archivo, size representa el tamaño del archivo o -1 si se desconoce. Su significado está actualmente indefinido para las entradas de directorio.
- os.listdir(dir: str | None = None) List[str]¶
Sin argumentos, lista el directorio actual. En caso contrario, lista el directorio indicado.
- os.statvfs(path: str) Tuple¶
Obtiene el estado de un sistema de archivos.
Devuelve una tupla con la información del sistema de archivos en el siguiente orden:
f_bsize– Tamaño de bloque del sistema de archivosf_frsize– Tamaño de fragmentof_blocks– Tamaño del fs en unidades de f_frsizef_bfree– Número de bloques libresf_bavail– Número de bloques libres para usuarios sin privilegiosf_files– Número de inodosf_ffree– Número de inodos libresf_favail– Número de inodos libres para usuarios sin privilegiosf_flag– Indicadores de montajef_namemax– Longitud máxima del nombre de archivo
Parámetros relacionados con los inodos:
f_files,f_ffree,f_favaily el parámetrof_flagpueden devolver0, ya que pueden no estar disponibles en una implementación específica del port.
Redirección y duplicación del terminal¶
- os.dupterm(stream_object: Any, index: int = 0, /) Any¶
Duplica o cambia el terminal de MicroPython (el REPL) al objeto de tipo stream indicado. El argumento stream_object debe ser un objeto stream nativo, o derivar de
io.IOBasee implementar los métodosreadinto()ywrite(). El stream debería estar en modo no bloqueante yreadinto()debería devolverNonesi no hay datos disponibles para leer.Tras llamar a esta función, toda la salida del terminal se repite en este stream, y cualquier entrada disponible en el stream se transfiere a la entrada del terminal.
El parámetro index debe ser un entero no negativo y especifica qué ranura de duplicación se establece. Un port determinado puede implementar más de una ranura (la ranura 0 siempre estará disponible) y, en ese caso, la entrada y salida del terminal se duplican en todas las ranuras establecidas.
Si se pasa
Nonecomo stream_object, se cancela la duplicación en la ranura indicada por index.La función devuelve el anterior objeto de tipo stream en la ranura indicada.
- os.dupterm_notify(obj_in: Any, /) None¶
Notifica al REPL de MicroPython que hay entrada disponible en un objeto de tipo stream registrado previamente mediante
os.dupterm().Esta función debería ser llamada por las implementaciones de stream personalizadas (p. ej., UART, Bluetooth u otros streams de REPL que no sean USB) para informar al REPL de que hay entrada lista para leer. Un uso correcto garantiza que caracteres especiales como Ctrl+C (utilizado para activar KeyboardInterrupt) sean procesados con prontitud por el REPL, habilitando el comportamiento de interrupción esperado para el código del usuario.
El parámetro obj_in es ignorado por
os.dupterm_notify(), pero es necesario para permitir llamar a dupterm_notify desde un manejador de interrupción comoUART.irq().Ejemplo:
from machine import UART import os uart = UART(0) os.dupterm(uart, 0) uart.irq(os.dupterm_notify, machine.UART.IRQ_RX)
Nota
Si no se llama a la función
dupterm_notify(), la entrada del stream personalizado podría no detectarse ni procesarse hasta el siguiente sondeo del REPL, lo que podría retrasar los KeyboardInterrupt u otras señales de control. Esto es especialmente importante para UART, Bluetooth y otras conexiones de REPL no estándar, donde la notificación automática no está garantizada.
Montaje del sistema de archivos¶
Las siguientes funciones y clases se han trasladado al módulo vfs. Se proporcionan en este módulo únicamente por compatibilidad con versiones anteriores y se eliminarán en la versión 2 de MicroPython.
- os.mount(fsobj: Any, mount_point: str, *, readonly: bool = False) None¶
Monta el objeto de sistema de archivos fsobj en la ubicación del VFS indicada por la cadena mount_point. fsobj puede ser un objeto VFS que tenga un método
mount(), o un dispositivo de bloques. Si es un dispositivo de bloques, el tipo de sistema de archivos se detecta automáticamente (se lanza una excepción si no se reconoce ningún sistema de archivos). mount_point puede ser'/'para montar fsobj en la raíz, o'/<name>'para montarlo en un subdirectorio bajo la raíz.Si readonly es
True, el sistema de archivos se monta como solo lectura.Durante el proceso de montaje se llama al método
mount()del objeto de sistema de archivos.Lanzará
OSError(EPERM)si mount_point ya está montado.
- os.mount() List[Tuple[Any, str]]
Sin argumentos para
mount(), devuelve una lista de tuplas que representan todos los puntos de montaje activos.La lista devuelta tiene la forma [(fsobj, mount_point), …].
- os.umount(mount_point: str | Any) None¶
Desmonta un sistema de archivos. mount_point puede ser una cadena que nombre la ubicación de montaje, o un objeto de sistema de archivos montado previamente. Durante el proceso de desmontaje se llama al método
umount()del objeto de sistema de archivos.Lanzará
OSError(EINVAL)si no se encuentra mount_point.
- class os.VfsFat(block_dev: AbstractBlockDev)¶
Crea un objeto de sistema de archivos que utiliza el formato de sistema de archivos FAT. El almacenamiento del sistema de archivos FAT lo proporciona block_dev. Los objetos creados por este constructor pueden montarse mediante
mount().- static mkfs(block_dev: AbstractBlockDev) None¶
Construye un sistema de archivos FAT en block_dev.
- class os.VfsPosix(root: str | None = None)¶
Crea un objeto de sistema de archivos que accede al sistema de archivos POSIX del host. Si se especifica root, debería ser una ruta en el sistema de archivos del host que se utilizará como raíz del objeto
VfsPosix. De lo contrario, se utiliza el directorio actual del sistema de archivos del host.Nota
VfsPosixsolo está disponible en el port Unix; no está presente en la OpenMV Cam.