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 subyacente

  • nodename – El nombre de red (puede ser el mismo que sysname)

  • release – La versión del sistema subyacente

  • version – La versión de MicroPython y la fecha de compilación

  • machine – 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.chdir(path: str) None

Cambia el directorio actual.

os.getcwd() str

Obtiene el directorio actual.

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.mkdir(path: str) None

Crea un nuevo directorio.

os.remove(path: str) None

Elimina un archivo.

Elimina un archivo. Es un alias de remove().

os.rmdir(path: str) None

Elimina un directorio.

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

Renombra un archivo.

os.stat(path: str) Tuple

Obtiene el estado de un archivo o directorio.

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 archivos

  • f_frsize – Tamaño de fragmento

  • f_blocks – Tamaño del fs en unidades de f_frsize

  • f_bfree – Número de bloques libres

  • f_bavail – Número de bloques libres para usuarios sin privilegios

  • f_files – Número de inodos

  • f_ffree – Número de inodos libres

  • f_favail – Número de inodos libres para usuarios sin privilegios

  • f_flag – Indicadores de montaje

  • f_namemax – Longitud máxima del nombre de archivo

Parámetros relacionados con los inodos: f_files, f_ffree, f_favail y el parámetro f_flag pueden devolver 0, ya que pueden no estar disponibles en una implementación específica del port.

os.sync() None

Sincroniza todos los sistemas de archivos.

os.sep: str

El separador de componentes de ruta utilizado por el sistema de archivos, la cadena '/'.

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.IOBase e implementar los métodos readinto() y write(). El stream debería estar en modo no bloqueante y readinto() debería devolver None si 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 None como 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 como UART.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

VfsPosix solo está disponible en el port Unix; no está presente en la OpenMV Cam.