os --- บริการ "ระบบปฏิบัติการ" พื้นฐาน

โมดูล os มีฟังก์ชันสำหรับการเข้าถึงและการ mount ระบบไฟล์ การเปลี่ยนเส้นทางและการทำซ้ำ terminal และฟังก์ชัน uname และ urandom

ฟังก์ชันทั่วไป

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

คืนค่า tuple (อาจเป็น named tuple) ที่มีข้อมูลเกี่ยวกับเครื่องหรือระบบปฏิบัติการที่ใช้งานอยู่ โดย tuple มีห้าฟิลด์ตามลำดับดังต่อไปนี้ แต่ละฟิลด์เป็น string:

  • sysname -- ชื่อของระบบที่ใช้งานอยู่

  • nodename -- ชื่อเครือข่าย (อาจเหมือนกับ sysname)

  • release -- เวอร์ชันของระบบที่ใช้งานอยู่

  • version -- เวอร์ชัน MicroPython และวันที่ build

  • machine -- ตัวระบุฮาร์ดแวร์ที่ใช้งานอยู่ (เช่น board, CPU)

os.urandom(n: int) bytes

คืนค่าออบเจ็กต์ bytes ที่มีไบต์สุ่ม n ไบต์ แหล่งที่มาเหมาะสมสำหรับการเข้ารหัสบน cam ที่รองรับทุกตัว แม้ว่าการใช้งานจะแตกต่างกันตาม port:

  • STM32 cams (M4, M7, H7, H7+, PT, N6) ใช้ STM32 hardware RNG peripheral

  • i.MX RT1062 cams (RT1060) ใช้ hardware TRNG ของชิป

  • Alif Ensemble cams (AE3) ใช้บริการสุ่มฮาร์ดแวร์ของ Secure Enclave

  • Arduino Nano 33 BLE Sense ใช้ nRF52 hardware RNG peripheral

  • Arduino Nano RP2040 Connect ไม่มี hardware TRNG โดย pico-sdk PRNG จะถูก seed และผสมซ้ำอย่างต่อเนื่องกับแหล่ง entropy ในชิปของ RP2040

การเข้าถึงระบบไฟล์

os.chdir(path: str) None

เปลี่ยนไดเรกทอรีปัจจุบัน

os.getcwd() str

รับไดเรกทอรีปัจจุบัน

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

ฟังก์ชันนี้คืนค่า iterator ซึ่งจะส่งออก tuple ที่สอดคล้องกับรายการในไดเรกทอรีที่กำลังแสดงรายการ หากไม่มีอาร์กิวเมนต์จะแสดงรายการไดเรกทอรีปัจจุบัน มิฉะนั้นจะแสดงรายการไดเรกทอรีที่ระบุใน dir

tuple มีรูปแบบ (name, type, inode[, size]):

  • name เป็น string (หรือ bytes หาก dir เป็นออบเจ็กต์ 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

รับสถานะของระบบไฟล์

คืนค่า tuple ที่มีข้อมูลระบบไฟล์ตามลำดับดังต่อไปนี้:

  • f_bsize -- ขนาดบล็อกของระบบไฟล์

  • f_frsize -- ขนาด Fragment

  • f_blocks -- ขนาดของ fs ในหน่วย f_frsize

  • f_bfree -- จำนวนบล็อกว่าง

  • f_bavail -- จำนวนบล็อกว่างสำหรับผู้ใช้ที่ไม่มีสิทธิ์พิเศษ

  • f_files -- จำนวน inode

  • f_ffree -- จำนวน inode ว่าง

  • f_favail -- จำนวน inode ว่างสำหรับผู้ใช้ที่ไม่มีสิทธิ์พิเศษ

  • f_flag -- flags การ mount

  • f_namemax -- ความยาวชื่อไฟล์สูงสุด

พารามิเตอร์ที่เกี่ยวข้องกับ inode ได้แก่ f_files, f_ffree, f_favail และพารามิเตอร์ f_flag อาจคืนค่า 0 เนื่องจากอาจไม่พร้อมใช้งานในการใช้งานเฉพาะ port

os.sync() None

ซิงค์ระบบไฟล์ทั้งหมด

os.sep: str

ตัวคั่น path component ที่ระบบไฟล์ใช้ เป็น string '/'

การเปลี่ยนเส้นทางและการทำซ้ำ terminal

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

ทำซ้ำหรือสลับ MicroPython terminal (REPL) บนออบเจ็กต์ที่มีลักษณะคล้าย stream ที่กำหนด อาร์กิวเมนต์ stream_object ต้องเป็นออบเจ็กต์ stream แบบ native หรือ derive จาก io.IOBase และใช้งานเมธอด readinto() และ write() stream ควรอยู่ในโหมด non-blocking และ readinto() ควรคืนค่า None หากไม่มีข้อมูลพร้อมอ่าน

หลังจากเรียกฟังก์ชันนี้ output ของ terminal ทั้งหมดจะถูกทำซ้ำบน stream นี้ และ input ที่พร้อมใช้งานบน stream จะถูกส่งต่อไปยัง terminal input

พารามิเตอร์ index ควรเป็นจำนวนเต็มที่ไม่เป็นลบและระบุว่า duplication slot ใดที่ถูกตั้งค่า port ที่กำหนดอาจใช้งาน slot มากกว่าหนึ่ง (slot 0 จะพร้อมใช้งานเสมอ) และในกรณีนั้น terminal input และ output จะถูกทำซ้ำบน slot ทั้งหมดที่ตั้งค่าไว้

หากส่ง None เป็น stream_object การทำซ้ำจะถูกยกเลิกบน slot ที่ระบุด้วย index

ฟังก์ชันคืนค่าออบเจ็กต์ที่มีลักษณะคล้าย stream ก่อนหน้าใน slot ที่กำหนด

os.dupterm_notify(obj_in: Any, /) None

แจ้ง MicroPython REPL ว่ามี input พร้อมใช้งานบนออบเจ็กต์ที่มีลักษณะคล้าย stream ที่ลงทะเบียนไว้ก่อนหน้านี้ผ่าน os.dupterm()

ควรเรียกฟังก์ชันนี้โดยการใช้งาน stream แบบกำหนดเอง (เช่น UART, Bluetooth หรือ stream REPL ที่ไม่ใช่ USB อื่นๆ) เพื่อแจ้ง REPL ว่า input พร้อมอ่านแล้ว การใช้งานที่ถูกต้องจะช่วยให้อักขระพิเศษเช่น Ctrl+C (ที่ใช้ trigger KeyboardInterrupt) ถูก REPL ประมวลผลได้ทันที ทำให้พฤติกรรมการหยุดทำงานของโค้ดผู้ใช้เป็นไปตามที่คาดหวัง

พารามิเตอร์ obj_in ถูกละเว้นโดย os.dupterm_notify() แต่จำเป็นต้องมีเพื่อให้สามารถเรียก dupterm_notify จาก interrupt handler เช่น UART.irq()

ตัวอย่าง:

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

Note

หากไม่มีการเรียก dupterm_notify() input จาก stream แบบกำหนดเองอาจไม่ถูกตรวจพบหรือประมวลผลจนกว่า REPL จะ poll ครั้งถัดไป ซึ่งอาจทำให้เกิดการหน่วง KeyboardInterrupt หรือ control signal อื่นๆ สิ่งนี้สำคัญอย่างยิ่งสำหรับ UART, Bluetooth และการเชื่อมต่อ REPL ที่ไม่ได้มาตรฐานอื่นๆ ซึ่งการแจ้งเตือนอัตโนมัติไม่ได้รับการรับประกัน

การ mount ระบบไฟล์

ฟังก์ชันและคลาสต่อไปนี้ถูกย้ายไปยังโมดูล vfs แล้ว โดยมีให้ในโมดูลนี้เพื่อความเข้ากันได้ย้อนหลังเท่านั้น และจะถูกลบออกในเวอร์ชัน 2 ของ MicroPython

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

Mount ออบเจ็กต์ระบบไฟล์ fsobj ที่ตำแหน่งใน VFS ที่กำหนดโดย string mount_point โดย fsobj อาจเป็นออบเจ็กต์ VFS ที่มีเมธอด mount() หรือ block device หากเป็น block device ประเภทระบบไฟล์จะถูกตรวจจับโดยอัตโนมัติ (จะเกิด exception หากไม่รู้จักระบบไฟล์ใด) mount_point อาจเป็น '/' เพื่อ mount fsobj ที่ root หรือ '/<name>' เพื่อ mount ที่ไดเรกทอรีย่อยใต้ root

หาก readonly เป็น True ระบบไฟล์จะถูก mount แบบอ่านอย่างเดียว

ในระหว่างกระบวนการ mount เมธอด mount() จะถูกเรียกบนออบเจ็กต์ระบบไฟล์

จะเกิด OSError(EPERM) หาก mount_point ถูก mount อยู่แล้ว

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

หากไม่มีอาร์กิวเมนต์สำหรับ mount() จะคืนค่ารายการ tuple ที่แสดง mountpoint ที่ active ทั้งหมด

รายการที่คืนค่ามีรูปแบบ [(fsobj, mount_point), ...]

os.umount(mount_point: str | Any) None

Unmount ระบบไฟล์ mount_point อาจเป็น string ที่ระบุตำแหน่ง mount หรือออบเจ็กต์ระบบไฟล์ที่ mount ไว้ก่อนหน้า ในระหว่างกระบวนการ unmount เมธอด umount() จะถูกเรียกบนออบเจ็กต์ระบบไฟล์

จะเกิด OSError(EINVAL) หากไม่พบ mount_point

class os.VfsFat(block_dev: AbstractBlockDev)

สร้างออบเจ็กต์ระบบไฟล์ที่ใช้รูปแบบระบบไฟล์ FAT โดยการจัดเก็บข้อมูลของระบบไฟล์ FAT ถูกจัดหาโดย block_dev ออบเจ็กต์ที่สร้างโดย constructor นี้สามารถ mount ได้โดยใช้ mount()

static mkfs(block_dev: AbstractBlockDev) None

สร้างระบบไฟล์ FAT บน block_dev

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

สร้างออบเจ็กต์ระบบไฟล์ที่เข้าถึงระบบไฟล์ POSIX ของ host หากระบุ root ควรเป็น path ในระบบไฟล์ host ที่ใช้เป็น root ของออบเจ็กต์ VfsPosix มิฉะนั้นจะใช้ไดเรกทอรีปัจจุบันของระบบไฟล์ host

Note

VfsPosix ใช้งานได้เฉพาะบน Unix port เท่านั้น ไม่มีให้ใช้งานบน OpenMV Cam