sys --- ฟังก์ชันเฉพาะระบบ

โมดูลนี้ให้การเข้าถึงตัวแปรและฟังก์ชันเฉพาะของอินเทอร์พรีเตอร์ รวมถึงอาร์กิวเมนต์บรรทัดคำสั่ง เส้นทางค้นหาโมดูล สตรีมมาตรฐาน และข้อมูลเกี่ยวกับการใช้งานที่กำลังทำงานอยู่

ฟังก์ชัน

sys.exit(retval: object = 0, /) NoReturn

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

บน OpenMV Cam หาก SystemExit ไม่ได้รับการจัดการ จะทำให้เกิด รีเซ็ตแบบซอฟต์ ของ MicroPython ในขณะนี้

sys.atexit(func: Callable[[], None] | None) Callable[[], None] | None

ลงทะเบียน func ให้เรียกใช้เมื่อสิ้นสุดโปรแกรม func ต้องเป็น callable ที่ไม่รับอาร์กิวเมนต์ หรือ None เพื่อยกเลิกการเรียก ฟังก์ชัน atexit จะคืนค่าที่ตั้งไว้ก่อนหน้าโดยฟังก์ชันนี้ ซึ่งเริ่มต้นเป็น None

ความแตกต่างจาก CPython

ฟังก์ชันนี้เป็นส่วนขยายของ MicroPython ที่ออกแบบมาเพื่อให้ฟังก์ชันการทำงานคล้ายกับโมดูล atexit ใน CPython

sys.print_exception(exc: BaseException, file: Any = sys.stdout, /) None

พิมพ์ข้อยกเว้นพร้อม traceback ไปยังออบเจกต์คล้ายไฟล์ file (หรือ sys.stdout โดยค่าเริ่มต้น)

ความแตกต่างจาก CPython

นี่คือเวอร์ชันที่ลดความซับซ้อนของฟังก์ชันที่ปรากฏในโมดูล traceback ของ CPython แตกต่างจาก traceback.print_exception() ตรงที่ฟังก์ชันนี้รับเพียงค่าของข้อยกเว้นแทนที่จะเป็นประเภท ค่า และออบเจกต์ traceback ของข้อยกเว้น; อาร์กิวเมนต์ file ควรเป็น positional; ไม่รองรับอาร์กิวเมนต์เพิ่มเติม โมดูล traceback ที่เข้ากันได้กับ CPython สามารถพบได้ใน micropython-lib

sys.settrace(tracefunc: Callable | None) None

เปิดใช้งานการติดตามการทำงานของ bytecode สำหรับรายละเอียดดูได้ที่ เอกสาร CPython

ฟังก์ชันนี้ ไม่พร้อมใช้งานบน OpenMV Cam มันถูกปิดใช้งานโดยค่าเริ่มต้นเพราะทำให้การทำงานของโค้ดช้าลง การเปิดใช้งานต้องการการสร้างเฟิร์มแวร์แบบกำหนดเอง

ค่าคงที่

sys.argv: list[str]

รายการที่แก้ไขได้ของอาร์กิวเมนต์ที่โปรแกรมปัจจุบันเริ่มต้นด้วย

sys.byteorder: str

ลำดับไบต์ของระบบ ("little" หรือ "big")

sys.implementation: object

ออบเจกต์พร้อมข้อมูลเกี่ยวกับการใช้งาน Python ปัจจุบัน สำหรับ MicroPython มีแอตทริบิวต์ดังนี้:

  • name - สตริง "micropython"

  • version - ทูเพิล (major, minor, micro, releaselevel) เช่น (1, 22, 0, '')

  • _machine - สตริงที่อธิบายเครื่องพื้นฐาน

  • _mpy - เวอร์ชันรูปแบบไฟล์ mpy ที่รองรับ (แอตทริบิวต์เสริม)

  • _build - สตริงที่ช่วยระบุการกำหนดค่าที่ MicroPython ถูกสร้างขึ้น

  • _thread - แอตทริบิวต์สตริงเสริม มีอยู่หากเป้าหมายมีการทำงานแบบ threading และเป็นค่า "GIL" หรือ "unsafe"

ออบเจกต์นี้เป็นวิธีที่แนะนำในการแยกแยะ MicroPython จากการใช้งาน Python อื่น (โปรดทราบว่ายังอาจไม่มีในพอร์ตที่มีขนาดเล็กมาก)

ตั้งแต่เวอร์ชัน 1.22.0-preview เป็นต้นไป โหนดที่สี่ releaselevel ใน implementation.version จะเป็นสตริงว่างหรือ "preview"

รายการ _build ถูกเพิ่มในเวอร์ชัน 1.25.0 และเป็นชุดองค์ประกอบที่คั่นด้วยยัติภังค์ องค์ประกอบใหม่อาจถูกเพิ่มในอนาคต ดังนั้นวิธีที่ดีที่สุดในการเข้าถึงฟิลด์นี้คือใช้ sys.implementation._build.split("-") องค์ประกอบที่ใช้อยู่ในปัจจุบันได้แก่:

  • บน OpenMV Cam องค์ประกอบแรกคือชื่อบอร์ดและองค์ประกอบที่สอง (ถ้ามี) คือตัวแปรของบอร์ด

รายการ _thread ถูกเพิ่มในเวอร์ชัน 1.26.0 และหากมีอยู่ แสดงว่าเป้าหมายมีโมดูล _thread ถ้าเป้าหมายเปิดใช้งาน GIL (global interpreter lock) แอตทริบิวต์นี้จะเป็น "GIL" มิฉะนั้น แอตทริบิวต์จะเป็น "unsafe" และเป้าหมายมีการทำงานแบบ threading แต่ไม่เปิดใช้งาน GIL และออบเจกต์ Python ที่แก้ไขได้ (เช่น bytearray, list และ dict) ที่แชร์ระหว่าง thread จะต้องได้รับการปกป้องอย่างชัดเจนด้วย lock เช่น _thread.allocate_lock

ความแตกต่างจาก CPython

CPython กำหนดให้มีแอตทริบิวต์เพิ่มเติมสำหรับออบเจกต์นี้ แต่ค่าขั้นต่ำที่มีประโยชน์จริงๆ ได้รับการใช้งานใน MicroPython

sys.maxsize: int

ค่าสูงสุดที่ประเภทจำนวนเต็มแบบ native สามารถเก็บได้บนแพลตฟอร์มปัจจุบัน หรือค่าสูงสุดที่ประเภทจำนวนเต็ม MicroPython สามารถแทนได้ ถ้ามันเล็กกว่าค่าสูงสุดของแพลตฟอร์ม (นั่นคือกรณีสำหรับพอร์ต MicroPython ที่ไม่รองรับ long int)

แอตทริบิวต์นี้มีประโยชน์สำหรับการตรวจสอบ "bitness" ของแพลตฟอร์ม (32-bit กับ 64-bit เป็นต้น) แนะนำให้ไม่นำแอตทริบิวต์นี้ไปเปรียบเทียบกับค่าโดยตรง แต่ให้นับจำนวนบิตในนั้นแทน:

bits = 0
v = sys.maxsize
while v:
    bits += 1
    v >>= 1
if bits > 32:
    # 64-bit (or more) platform
    ...
else:
    # 32-bit (or less) platform
    # Note that on 32-bit platform, value of bits may be less than 32
    # (e.g. 31) due to peculiarities described above, so use "> 16",
    # "> 32", "> 64" style of comparisons.
sys.modules: dict

พจนานุกรมของโมดูลที่โหลดแล้ว บน OpenMV Cam นี้ไม่รวมโมดูล built-in

sys.path: list[str]

รายการที่แก้ไขได้ของไดเรกทอรีที่ใช้ค้นหาโมดูลที่นำเข้า

ความแตกต่างจาก CPython

บน MicroPython รายการที่มีค่า ".frozen" จะบ่งบอกว่าการนำเข้าควรค้นหา frozen modules ณ จุดนั้นในการค้นหา หากไม่พบ frozen module การค้นหาจะ ไม่ มองหาไดเรกทอรีชื่อ .frozen แต่จะดำเนินการต่อด้วยรายการถัดไปใน sys.path

sys.platform: str

แพลตฟอร์มที่ MicroPython ทำงานอยู่ นี่คือสตริงที่กำหนดโดยพอร์ต/บอร์ด -- ตัวอย่างเช่น "mimxrt" บน OpenMV RT1060 และ "alif" บน OpenMV AE3 (OpenMV Cam รุ่นเก่าบางรุ่นรายงานสตริงเฉพาะโมเดล เช่น "OpenMV4-H7") หากต้องการตรวจสอบว่าโปรแกรมของคุณทำงานบน MicroPython (เทียบกับการใช้งาน Python อื่น) ให้ใช้ sys.implementation แทน

sys.ps1: str

แอตทริบิวต์ที่แก้ไขได้ซึ่งเก็บสตริงที่ใช้สำหรับ REPL prompt หลัก ค่าเริ่มต้นจะให้ Python prompt มาตรฐานของ >>> ดูเพิ่มเติมที่ sys.ps2 สำหรับ continuation prompt

sys.ps2: str

แอตทริบิวต์ที่แก้ไขได้ซึ่งเก็บสตริงที่ใช้สำหรับ REPL continuation prompt ค่าเริ่มต้นจะให้ Python prompt มาตรฐานของ ... ดูเพิ่มเติมที่ sys.ps1 สำหรับ primary prompt

sys.stderr: object

Standard error stream

sys.stdin: object

Standard input stream

sys.stdout: object

Standard output stream

sys.tracebacklimit: int

แอตทริบิวต์ที่แก้ไขได้ซึ่งเก็บค่าจำนวนเต็มที่เป็นจำนวนสูงสุดของรายการ traceback ที่จะเก็บในข้อยกเว้น ตั้งค่าเป็น 0 เพื่อปิดการใช้งานการเพิ่ม traceback ค่าเริ่มต้นคือ 1000

หมายเหตุ: แอตทริบิวต์นี้ไม่พร้อมใช้งานบน OpenMV Cam

sys.version: str

เวอร์ชันภาษา Python ที่การใช้งานนี้เป็นไปตาม ในรูปแบบสตริง

sys.version_info: tuple

เวอร์ชันภาษา Python ที่การใช้งานนี้เป็นไปตาม ในรูปแบบทูเพิลของจำนวนเต็ม

ความแตกต่างจาก CPython

รองรับเฉพาะตัวเลขเวอร์ชันสามตัวแรก (major, minor, micro) และสามารถอ้างอิงได้โดยดัชนีเท่านั้น ไม่ใช่ตามชื่อ