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 และวันที่ buildmachine-- ตัวระบุฮาร์ดแวร์ที่ใช้งานอยู่ (เช่น 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.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.statvfs(path: str) Tuple¶
รับสถานะของระบบไฟล์
คืนค่า tuple ที่มีข้อมูลระบบไฟล์ตามลำดับดังต่อไปนี้:
f_bsize-- ขนาดบล็อกของระบบไฟล์f_frsize-- ขนาด Fragmentf_blocks-- ขนาดของ fs ในหน่วย f_frsizef_bfree-- จำนวนบล็อกว่างf_bavail-- จำนวนบล็อกว่างสำหรับผู้ใช้ที่ไม่มีสิทธิ์พิเศษf_files-- จำนวน inodef_ffree-- จำนวน inode ว่างf_favail-- จำนวน inode ว่างสำหรับผู้ใช้ที่ไม่มีสิทธิ์พิเศษf_flag-- flags การ mountf_namemax-- ความยาวชื่อไฟล์สูงสุด
พารามิเตอร์ที่เกี่ยวข้องกับ inode ได้แก่
f_files,f_ffree,f_favailและพารามิเตอร์f_flagอาจคืนค่า0เนื่องจากอาจไม่พร้อมใช้งานในการใช้งานเฉพาะ port
การเปลี่ยนเส้นทางและการทำซ้ำ 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มิฉะนั้นจะใช้ไดเรกทอรีปัจจุบันของระบบไฟล์ hostNote
VfsPosixใช้งานได้เฉพาะบน Unix port เท่านั้น ไม่มีให้ใช้งานบน OpenMV Cam