Để trả lời câu hỏi trong tiêu đề của bạn nhưng không phải là trường hợp cụ thể mà bạn cung cấp, điều đó hoàn toàn chính xác, hàng tấn gói làm điều này. Có lẽ tốt hơn là tự mình tìm ra HĐH thay vì dựa vào người dùng; Đây là pySerial làm điều đó như một ví dụ.
serial/__init__.py
import sys
if sys.platform == 'cli':
from serial.serialcli import Serial
else:
import os
# chose an implementation, depending on os
if os.name == 'nt': # sys.platform == 'win32':
from serial.serialwin32 import Serial
elif os.name == 'posix':
from serial.serialposix import Serial, PosixPollSerial, VTIMESerial # noqa
elif os.name == 'java':
from serial.serialjava import Serial
else:
raise ImportError(
"Sorry: no implementation for your platform ('{}') available".format(
os.name
)
)
Điều này chỉ nên được sử dụng trong trường hợp bạn đang giả định và cần một sự đảm bảo chắc chắn rằng các giao diện / tính năng nhất định sẽ có ở đó: ví dụ: một 'tệp' được gọi /dev/ttyX. Trong trường hợp của bạn: xử lý JSON, không có gì thực sự dành riêng cho hệ điều hành và bạn chỉ kiểm tra xem gói có tồn tại hay không. Trong trường hợp đó, chỉ cần trynhập nó và quay lại với exceptnếu nó không thành công:
try:
import some_specific_json_module as json
except ImportError:
import json
platform.platform()hoặcplatform.system()nên làm những gì bạn cần, thay vì người dùng phải nhập một cái gì đó mỗi khi mã được chạy.