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ố choSystemExit.Trên OpenMV Cam, một
SystemExitkhô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àmatexitsẽ 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
atexittrong 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.stdouttheo 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
tracebacktrong CPython. Khác vớitraceback.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ô-đuntracebacktương thích CPython có thể tìm thấy trongmicropython-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.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,listvàdict) đượ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 trongsys.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ùngsys.implementationthay 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êmsys.ps2cho 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êmsys.ps1cho dấu nhắc chính.