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 uname và urandom.
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ảngnodename-- Tên mạng (có thể giốngsysname)release-- Phiên bản của hệ thống nền tảngversion-- Phiên bản MicroPython và ngày buildmachine-- Đị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.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.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ệpf_frsize-- Kích thước fragmentf_blocks-- Kích thước hệ thống tệp theo đơn vị f_frsizef_bfree-- Số khối trốngf_bavail-- Số khối trống cho người dùng không có đặc quyềnf_files-- Số inodef_ffree-- Số inode trốngf_favail-- Số inode trống cho người dùng không có đặc quyềnf_flag-- Cờ gắn kếtf_namemax-- Độ dài tên tệp tối đa
Các tham số liên quan đến inode:
f_files,f_ffree,f_favailvà tham sốf_flagcó thể trả về0vì chúng có thể không khả dụng trong phần triển khai cụ thể theo port.
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.IOBasevà triển khai các phương thứcreadinto()vàwrite(). Stream nên ở chế độ non-blocking vàreadinto()nên trả vềNonenế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 readonly là
Truethì 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ú
VfsPosixchỉ khả dụng trên port Unix; nó không có trên OpenMV Cam.