sys --- các hàm đặc thù của hệ thống

Mô-đun này cung cấp quyền truy cập vào các biến và hàm đặc thù của trình thông dịch, bao gồm các đối số dòng lệnh, đường dẫn tìm kiếm mô-đun, các luồng chuẩn và thông tin về triển khai đang chạy.

Hàm

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

Kết thúc chương trình hiện tại với mã thoát đã cho. Về bản chất, hàm này ném ra ngoại lệ SystemExit. Nếu có đối số được truyền vào, giá trị của nó sẽ được dùng làm đối số cho SystemExit.

Trên OpenMV Cam, một SystemExit không được xử lý hiện tại sẽ gây ra Đặt lại mềm của MicroPython.

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

Đăng ký func để được gọi khi kết thúc chương trình. func phải là một callable không nhận đối số, hoặc None để vô hiệu hóa lời gọi. Hàm atexit sẽ trả về giá trị trước đó được thiết lập bởi hàm này, ban đầu là None.

Khác biệt so với CPython

Hàm này là phần mở rộng MicroPython nhằm cung cấp chức năng tương tự mô-đun atexit trong CPython.

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

In ngoại lệ kèm traceback vào đối tượng giống file file (hoặc sys.stdout theo mặc định).

Khác biệt so với CPython

Đây là phiên bản đơn giản hóa của một hàm xuất hiện trong mô-đun traceback trong CPython. Khác với traceback.print_exception(), hàm này chỉ nhận giá trị ngoại lệ thay vì kiểu ngoại lệ, giá trị ngoại lệ và đối tượng traceback; đối số file phải là positional; các đối số thêm không được hỗ trợ. Mô-đun traceback tương thích CPython có thể tìm thấy trong micropython-lib.

sys.settrace(tracefunc: Callable | None) None

Bật tính năng tracing thực thi bytecode. Để biết chi tiết, xem tài liệu CPython.

Hàm này không khả dụng trên OpenMV Cam. Nó bị vô hiệu hóa theo mặc định vì làm chậm tốc độ thực thi mã; để bật cần phải build firmware tùy chỉnh.

Hằng số

sys.argv: list[str]

Danh sách có thể thay đổi chứa các đối số mà chương trình hiện tại được khởi động cùng.

sys.byteorder: str

Thứ tự byte của hệ thống ("little" hoặc "big").

sys.implementation: object

Đối tượng chứa thông tin về triển khai Python hiện tại. Với MicroPython, nó có các thuộc tính sau:

  • name - chuỗi "micropython"

  • version - tuple (major, minor, micro, releaselevel), ví dụ: (1, 22, 0, '')

  • _machine - chuỗi mô tả máy tính cơ bản

  • _mpy - phiên bản định dạng tệp mpy được hỗ trợ (thuộc tính tùy chọn)

  • _build - chuỗi có thể giúp xác định cấu hình mà MicroPython được build cùng

  • _thread - thuộc tính chuỗi tùy chọn, tồn tại nếu target có threading và là "GIL" hoặc "unsafe"

Đối tượng này là cách được khuyến nghị để phân biệt MicroPython với các triển khai Python khác (lưu ý rằng nó vẫn có thể không tồn tại trong các port tối giản nhất).

Bắt đầu từ phiên bản 1.22.0-preview, node thứ tư releaselevel trong implementation.version là một chuỗi rỗng hoặc "preview".

Mục _build được thêm vào trong phiên bản 1.25.0 và là một tập hợp các phần tử được phân tách bởi dấu gạch ngang. Các phần tử mới có thể được thêm vào trong tương lai, vì vậy tốt nhất là truy cập trường này bằng sys.implementation._build.split("-"). Các phần tử hiện đang được sử dụng là:

  • Trên OpenMV Cam, phần tử đầu tiên là tên board và phần tử thứ hai (nếu có) là biến thể board.

Mục _thread được thêm vào trong phiên bản 1.26.0 và nếu nó tồn tại thì target có mô-đun _thread. Nếu target bật GIL (global interpreter lock) thì thuộc tính này là "GIL". Nếu không, thuộc tính là "unsafe" và target có threading nhưng không bật GIL, và các đối tượng Python có thể thay đổi (như bytearray, listdict) được chia sẻ giữa các luồng phải được bảo vệ tường minh bằng khóa như _thread.allocate_lock.

Khác biệt so với CPython

CPython yêu cầu nhiều thuộc tính hơn cho đối tượng này, nhưng mức tối thiểu hữu ích thực sự đã được triển khai trong MicroPython.

sys.maxsize: int

Giá trị tối đa mà một kiểu số nguyên native có thể chứa trên nền tảng hiện tại, hoặc giá trị tối đa có thể biểu diễn bởi kiểu số nguyên MicroPython, nếu nó nhỏ hơn giá trị tối đa của nền tảng (đó là trường hợp với các port MicroPython không có hỗ trợ long int).

Thuộc tính này hữu ích để phát hiện "bitness" của nền tảng (32-bit so với 64-bit, v.v.). Nên không so sánh thuộc tính này trực tiếp với một giá trị, mà thay vào đó đếm số bit trong đó:

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

Từ điển các mô-đun đã được nạp. Trên OpenMV Cam, điều này không bao gồm các mô-đun tích hợp sẵn.

sys.path: list[str]

Danh sách có thể thay đổi chứa các thư mục để tìm kiếm các mô-đun được import.

Khác biệt so với CPython

Trên MicroPython, một mục có giá trị ".frozen" sẽ cho biết rằng import nên tìm kiếm frozen modules tại điểm đó trong quá trình tìm kiếm. Nếu không tìm thấy frozen module thì việc tìm kiếm sẽ không tìm thư mục có tên .frozen, thay vào đó sẽ tiếp tục với mục tiếp theo trong sys.path.

sys.platform: str

Nền tảng mà MicroPython đang chạy trên đó. Đây là chuỗi được xác định bởi port/board -- ví dụ "mimxrt" trên OpenMV RT1060 và "alif" trên OpenMV AE3 (một số OpenMV Cams cũ hơn báo cáo chuỗi đặc thù theo mô hình như "OpenMV4-H7"). Để kiểm tra xem chương trình của bạn có đang chạy trên MicroPython không (so với một triển khai Python khác), hãy dùng sys.implementation thay thế.

sys.ps1: str

Thuộc tính có thể thay đổi chứa chuỗi được dùng cho dấu nhắc REPL chính. Mặc định là dấu nhắc Python chuẩn >>>. Xem thêm sys.ps2 cho dấu nhắc tiếp tục.

sys.ps2: str

Thuộc tính có thể thay đổi chứa chuỗi được dùng cho dấu nhắc tiếp tục của REPL. Mặc định là dấu nhắc Python chuẩn .... Xem thêm sys.ps1 cho dấu nhắc chính.

sys.stderr: object

Luồng lỗi chuẩn stream.

sys.stdin: object

Luồng đầu vào chuẩn stream.

sys.stdout: object

Luồng đầu ra chuẩn stream.

sys.tracebacklimit: int

Thuộc tính có thể thay đổi chứa giá trị số nguyên là số mục traceback tối đa được lưu trữ trong một ngoại lệ. Đặt thành 0 để tắt việc thêm traceback. Mặc định là 1000.

Lưu ý: thuộc tính này không khả dụng trên OpenMV Cam.

sys.version: str

Phiên bản ngôn ngữ Python mà triển khai này tuân theo, dưới dạng chuỗi.

sys.version_info: tuple

Phiên bản ngôn ngữ Python mà triển khai này tuân theo, dưới dạng tuple các số nguyên.

Khác biệt so với CPython

Chỉ có ba số phiên bản đầu tiên (major, minor, micro) được hỗ trợ và chúng chỉ có thể được tham chiếu bằng chỉ số, không phải bằng tên.