os --- các dịch vụ "hệ điều hành" cơ bản

Module os chứa các hàm để truy cập và gắn kết hệ thống tệp, chuyển hướng và nhân đôi terminal, cùng các hàm unameurandom.

Các hàm chung

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

Trả về một tuple (có thể là named tuple) chứa thông tin về máy nền tảng và/hoặc hệ điều hành của nó. Tuple có năm trường theo thứ tự sau, mỗi trường là một chuỗi:

  • sysname -- Tên của hệ thống nền tảng

  • nodename -- Tên mạng (có thể giống sysname)

  • release -- Phiên bản của hệ thống nền tảng

  • version -- Phiên bản MicroPython và ngày build

  • machine -- Định danh phần cứng nền tảng (ví dụ: board, CPU)

os.urandom(n: int) bytes

Trả về đối tượng bytes chứa n byte ngẫu nhiên. Nguồn đáp ứng yêu cầu mật mã học trên mọi camera được hỗ trợ, mặc dù cách triển khai khác nhau tùy port:

  • Camera STM32 (M4, M7, H7, H7+, PT, N6) sử dụng ngoại vi RNG phần cứng của STM32.

  • Camera i.MX RT1062 (RT1060) sử dụng TRNG phần cứng của chip.

  • Camera Alif Ensemble (AE3) sử dụng dịch vụ ngẫu nhiên phần cứng của Secure Enclave.

  • Arduino Nano 33 BLE Sense sử dụng ngoại vi RNG phần cứng của nRF52.

  • Arduino Nano RP2040 Connect không có TRNG phần cứng; PRNG của pico-sdk được khởi tạo hạt giống và liên tục được trộn lại với các nguồn entropy on-chip của RP2040.

Truy cập hệ thống tệp

os.chdir(path: str) None

Thay đổi thư mục hiện tại.

os.getcwd() str

Lấy thư mục hiện tại.

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

Hàm này trả về một iterator sẽ yield các tuple tương ứng với các mục trong thư mục đang liệt kê. Không có đối số thì liệt kê thư mục hiện tại, ngược lại liệt kê thư mục được chỉ định bởi dir.

Các tuple có dạng (name, type, inode[, size]):

  • name là chuỗi (hoặc bytes nếu dir là đối tượng bytes) và là tên của mục;

  • type là số nguyên chỉ định loại mục, với 0x4000 cho thư mục và 0x8000 cho tệp thông thường;

  • inode là số nguyên tương ứng với inode của tệp, và có thể là 0 đối với các hệ thống tệp không có khái niệm này.

  • size là số nguyên có thể được bao gồm tùy thuộc vào loại hệ thống tệp. Đối với các mục tệp, size biểu thị kích thước của tệp hoặc -1 nếu không biết. Ý nghĩa của nó hiện chưa được xác định cho các mục thư mục.

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

Không có đối số thì liệt kê thư mục hiện tại. Ngược lại liệt kê thư mục đã cho.

os.mkdir(path: str) None

Tạo thư mục mới.

os.remove(path: str) None

Xóa một tệp.

Xóa một tệp. Đây là bí danh của remove().

os.rmdir(path: str) None

Xóa một thư mục.

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

Đổi tên một tệp.

os.stat(path: str) Tuple

Lấy trạng thái của một tệp hoặc thư mục.

os.statvfs(path: str) Tuple

Lấy trạng thái của một hệ thống tệp.

Trả về một tuple với thông tin hệ thống tệp theo thứ tự sau:

  • f_bsize -- Kích thước khối hệ thống tệp

  • f_frsize -- Kích thước fragment

  • f_blocks -- Kích thước hệ thống tệp theo đơn vị f_frsize

  • f_bfree -- Số khối trống

  • f_bavail -- Số khối trống cho người dùng không có đặc quyền

  • f_files -- Số inode

  • f_ffree -- Số inode trống

  • f_favail -- Số inode trống cho người dùng không có đặc quyền

  • f_flag -- Cờ gắn kết

  • f_namemax -- Độ dài tên tệp tối đa

Các tham số liên quan đến inode: f_files, f_ffree, f_favail và tham số f_flag có thể trả về 0 vì chúng có thể không khả dụng trong phần triển khai cụ thể theo port.

os.sync() None

Đồng bộ hóa tất cả các hệ thống tệp.

os.sep: str

Dấu phân cách thành phần đường dẫn được sử dụng bởi hệ thống tệp, chuỗi '/'.

Chuyển hướng và nhân đôi terminal

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

Nhân đôi hoặc chuyển đổi terminal MicroPython (REPL) trên đối tượng giống stream đã cho. Đối số stream_object phải là đối tượng stream gốc, hoặc kế thừa từ io.IOBase và triển khai các phương thức readinto()write(). Stream nên ở chế độ non-blocking và readinto() nên trả về None nếu không có dữ liệu để đọc.

Sau khi gọi hàm này, tất cả đầu ra terminal được lặp lại trên stream này, và bất kỳ đầu vào nào có trên stream đều được chuyển đến đầu vào terminal.

Tham số index phải là số nguyên không âm và chỉ định slot nhân đôi nào được đặt. Một port nhất định có thể triển khai nhiều hơn một slot (slot 0 luôn khả dụng) và trong trường hợp đó đầu vào và đầu ra terminal được nhân đôi trên tất cả các slot đã được đặt.

Nếu None được truyền vào làm stream_object thì việc nhân đôi bị hủy trên slot được chỉ định bởi index.

Hàm trả về đối tượng giống stream trước đó trong slot đã cho.

os.dupterm_notify(obj_in: Any, /) None

Thông báo cho REPL MicroPython rằng đầu vào có sẵn trên đối tượng giống stream đã được đăng ký trước đó qua os.dupterm().

Hàm này nên được gọi bởi các triển khai stream tùy chỉnh (ví dụ: UART, Bluetooth, hoặc các stream REPL không phải USB khác) để thông báo cho REPL rằng đầu vào đã sẵn sàng để đọc. Sử dụng đúng cách đảm bảo rằng các ký tự đặc biệt như Ctrl+C (dùng để kích hoạt KeyboardInterrupt) được REPL xử lý kịp thời, cho phép hành vi ngắt như mong đợi đối với mã người dùng.

Tham số obj_in bị bỏ qua bởi os.dupterm_notify(), nhưng cần thiết để cho phép gọi dupterm_notify từ một trình xử lý ngắt như UART.irq().

Ví dụ:

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

Ghi chú

Nếu hàm dupterm_notify() không được gọi, đầu vào từ stream tùy chỉnh có thể không được phát hiện hoặc xử lý cho đến lần polling REPL tiếp theo, có thể làm chậm KeyboardInterrupt hoặc các tín hiệu điều khiển khác. Điều này đặc biệt quan trọng đối với UART, Bluetooth và các kết nối REPL không chuẩn khác, nơi thông báo tự động không được đảm bảo.

Gắn kết hệ thống tệp

Các hàm và lớp sau đây đã được chuyển sang module vfs. Chúng chỉ được cung cấp trong module này để tương thích ngược và sẽ bị xóa trong phiên bản 2 của MicroPython.

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

Gắn kết đối tượng hệ thống tệp fsobj tại vị trí trong VFS được chỉ định bởi chuỗi mount_point. fsobj có thể là đối tượng VFS có phương thức mount(), hoặc là thiết bị khối. Nếu là thiết bị khối thì loại hệ thống tệp sẽ được tự động phát hiện (ngoại lệ sẽ được phát sinh nếu không nhận ra hệ thống tệp nào). mount_point có thể là '/' để gắn kết fsobj ở gốc, hoặc '/<name>' để gắn kết tại một thư mục con dưới gốc.

Nếu readonlyTrue thì hệ thống tệp được gắn kết ở chế độ chỉ đọc.

Trong quá trình gắn kết, phương thức mount() được gọi trên đối tượng hệ thống tệp.

Sẽ phát sinh OSError(EPERM) nếu mount_point đã được gắn kết.

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

Không có đối số cho mount(), trả về danh sách các tuple biểu thị tất cả các điểm gắn kết đang hoạt động.

Danh sách trả về có dạng [(fsobj, mount_point), ...].

os.umount(mount_point: str | Any) None

Tháo gắn kết hệ thống tệp. mount_point có thể là chuỗi chỉ định vị trí gắn kết, hoặc đối tượng hệ thống tệp đã được gắn kết trước đó. Trong quá trình tháo gắn kết, phương thức umount() được gọi trên đối tượng hệ thống tệp.

Sẽ phát sinh OSError(EINVAL) nếu không tìm thấy mount_point.

class os.VfsFat(block_dev: AbstractBlockDev)

Tạo đối tượng hệ thống tệp sử dụng định dạng FAT. Bộ nhớ cho hệ thống tệp FAT được cung cấp bởi block_dev. Các đối tượng được tạo bởi hàm khởi tạo này có thể được gắn kết bằng mount().

static mkfs(block_dev: AbstractBlockDev) None

Xây dựng hệ thống tệp FAT trên block_dev.

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

Tạo đối tượng hệ thống tệp truy cập hệ thống tệp POSIX của host. Nếu root được chỉ định thì nó phải là đường dẫn trong hệ thống tệp host để sử dụng làm gốc của đối tượng VfsPosix. Ngược lại, thư mục hiện tại của hệ thống tệp host được sử dụng.

Ghi chú

VfsPosix chỉ khả dụng trên port Unix; nó không có trên OpenMV Cam.