os — 기본 “운영 체제” 서비스

os 모듈에는 파일 시스템 접근 및 마운트, 터미널 리디렉션 및 복제를 위한 함수와 unameurandom 함수가 포함되어 있습니다.

일반 함수

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

기본 머신 및/또는 운영 체제에 대한 정보를 담은 튜플(이름이 있는 튜플일 수 있음)을 반환합니다. 튜플에는 다음 순서로 다섯 개의 필드가 있으며, 각 필드는 문자열입니다:

  • sysname – 기본 시스템의 이름

  • nodename – 네트워크 이름(sysname 과 같을 수 있음)

  • release – 기본 시스템의 버전

  • version – MicroPython 버전 및 빌드 날짜

  • machine – 기본 하드웨어 식별자(예: 보드, CPU)

os.urandom(n: int) bytes

n 개의 무작위 바이트를 담은 bytes 객체를 반환합니다. 소스는 지원되는 모든 카메라에서 암호학적으로 적합하지만, 구현은 포트에 따라 다릅니다:

  • STM32 카메라 (M4, M7, H7, H7+, PT, N6)는 STM32 하드웨어 RNG 주변장치를 사용합니다.

  • i.MX RT1062 카메라 (RT1060)는 칩의 하드웨어 TRNG를 사용합니다.

  • Alif Ensemble 카메라 (AE3)는 Secure Enclave의 하드웨어 난수 서비스를 사용합니다.

  • Arduino Nano 33 BLE Sense 는 nRF52 하드웨어 RNG 주변장치를 사용합니다.

  • Arduino Nano RP2040 Connect 에는 하드웨어 TRNG가 없습니다. pico-sdk PRNG가 시드되고 RP2040의 온칩 엔트로피 소스로 지속적으로 다시 혼합됩니다.

파일 시스템 접근

os.chdir(path: str) None

현재 디렉터리를 변경합니다.

os.getcwd() str

현재 디렉터리를 가져옵니다.

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

이 함수는 나열 중인 디렉터리의 항목에 해당하는 튜플을 산출하는 이터레이터를 반환합니다. 인수가 없으면 현재 디렉터리를 나열하고, 그렇지 않으면 dir 로 주어진 디렉터리를 나열합니다.

튜플은 (name, type, inode[, size]) 형식을 가집니다:

  • name 은 문자열(dir 이 bytes 객체이면 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_favailf_flag 매개변수는 포트별 구현에서 사용할 수 없을 수 있으므로 0 을 반환할 수 있습니다.

os.sync() None

모든 파일 시스템을 동기화합니다.

os.sep: str

파일 시스템에서 사용하는 경로 구성 요소 구분자, 문자열 '/' 입니다.

터미널 리디렉션 및 복제

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

주어진 stream 류 객체에서 MicroPython 터미널(REPL)을 복제하거나 전환합니다. stream_object 인수는 네이티브 스트림 객체이거나 io.IOBase 에서 파생되어 readinto()write() 메서드를 구현해야 합니다. 스트림은 논블로킹 모드여야 하며, 읽을 수 있는 데이터가 없으면 readinto()None 을 반환해야 합니다.

이 함수를 호출한 후에는 모든 터미널 출력이 이 스트림에서 반복되며, 스트림에서 사용 가능한 모든 입력이 터미널 입력으로 전달됩니다.

index 매개변수는 음이 아닌 정수여야 하며 어떤 복제 슬롯이 설정되는지 지정합니다. 특정 포트는 둘 이상의 슬롯(슬롯 0은 항상 사용 가능)을 구현할 수 있으며, 그 경우 터미널 입력과 출력은 설정된 모든 슬롯에서 복제됩니다.

stream_objectNone 이 전달되면 index 로 주어진 슬롯에서 복제가 취소됩니다.

이 함수는 주어진 슬롯의 이전 스트림 류 객체를 반환합니다.

os.dupterm_notify(obj_in: Any, /) None

os.dupterm() 을 통해 이전에 등록된 스트림 류 객체에서 입력이 사용 가능함을 MicroPython REPL에 알립니다.

이 함수는 입력을 읽을 준비가 되었음을 REPL에 알리기 위해 사용자 정의 스트림 구현(예: UART, 블루투스 또는 기타 비 USB REPL 스트림)에서 호출해야 합니다. 적절히 사용하면 Ctrl+C(KeyboardInterrupt를 트리거하는 데 사용)와 같은 특수 문자가 REPL에서 즉시 처리되어 사용자 코드에 대한 예상되는 인터럽트 동작이 가능해집니다.

obj_in 매개변수는 os.dupterm_notify() 에서 무시되지만, UART.irq() 와 같은 인터럽트 핸들러에서 dupterm_notify를 호출할 수 있도록 하기 위해 필요합니다.

예제:

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, 블루투스 및 기타 비표준 REPL 연결에서 특히 중요합니다.

파일 시스템 마운트

다음 함수와 클래스는 vfs 모듈로 이동되었습니다. 이 모듈에서는 하위 호환성을 위해서만 제공되며 MicroPython 버전 2에서 제거될 예정입니다.

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

파일 시스템 객체 fsobjmount_point 문자열로 주어진 VFS 위치에 마운트합니다. fsobjmount() 메서드가 있는 VFS 객체이거나 블록 장치일 수 있습니다. 블록 장치인 경우 파일 시스템 유형이 자동으로 감지됩니다(인식된 파일 시스템이 없으면 예외가 발생함). mount_pointfsobj 를 루트에 마운트하기 위해 '/' 이거나, 루트 아래의 하위 디렉터리에 마운트하기 위해 '/<name>' 일 수 있습니다.

readonlyTrue 이면 파일 시스템이 읽기 전용으로 마운트됩니다.

마운트 과정에서 파일 시스템 객체에 대해 mount() 메서드가 호출됩니다.

mount_point 가 이미 마운트되어 있으면 OSError(EPERM) 을 발생시킵니다.

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

mount() 에 인수가 없으면 모든 활성 마운트 지점을 나타내는 튜플 목록을 반환합니다.

반환된 목록은 [(fsobj, mount_point), …] 형식을 가집니다.

os.umount(mount_point: str | Any) None

파일 시스템을 마운트 해제합니다. mount_point 는 마운트 위치를 지정하는 문자열이거나 이전에 마운트된 파일 시스템 객체일 수 있습니다. 마운트 해제 과정에서 파일 시스템 객체에 대해 umount() 메서드가 호출됩니다.

mount_point 를 찾을 수 없으면 OSError(EINVAL) 을 발생시킵니다.

class os.VfsFat(block_dev: AbstractBlockDev)

FAT 파일 시스템 형식을 사용하는 파일 시스템 객체를 생성합니다. FAT 파일 시스템의 저장소는 block_dev 가 제공합니다. 이 생성자로 만든 객체는 mount() 를 사용하여 마운트할 수 있습니다.

static mkfs(block_dev: AbstractBlockDev) None

block_dev 에 FAT 파일 시스템을 구축합니다.

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

호스트 POSIX 파일 시스템에 접근하는 파일 시스템 객체를 생성합니다. root 가 지정되면 VfsPosix 객체의 루트로 사용할 호스트 파일 시스템의 경로여야 합니다. 그렇지 않으면 호스트 파일 시스템의 현재 디렉터리가 사용됩니다.

참고

VfsPosix 는 Unix 포트에서만 사용할 수 있으며, OpenMV Cam에는 없습니다.