Trả lời 2019 (dành cho Windows):
Nếu bạn muốn một UUID vĩnh viễn xác định một máy duy nhất trên Windows, bạn có thể sử dụng thủ thuật này: (Sao chép từ câu trả lời của tôi tại https://stackoverflow.com/a/58416992/8874388 ).
from typing import Optional
import re
import subprocess
import uuid
def get_windows_uuid() -> Optional[uuid.UUID]:
try:
# Ask Windows for the device's permanent UUID. Throws if command missing/fails.
txt = subprocess.check_output("wmic csproduct get uuid").decode()
# Attempt to extract the UUID from the command's result.
match = re.search(r"\bUUID\b[\s\r\n]+([^\s\r\n]+)", txt)
if match is not None:
txt = match.group(1)
if txt is not None:
# Remove the surrounding whitespace (newlines, space, etc)
# and useless dashes etc, by only keeping hex (0-9 A-F) chars.
txt = re.sub(r"[^0-9A-Fa-f]+", "", txt)
# Ensure we have exactly 32 characters (16 bytes).
if len(txt) == 32:
return uuid.UUID(txt)
except:
pass # Silence subprocess exception.
return None
print(get_windows_uuid())
Sử dụng API Windows để lấy UUID vĩnh viễn của máy tính, sau đó xử lý chuỗi để đảm bảo đó là UUID hợp lệ và cuối cùng trả về một đối tượng Python ( https://docs.python.org/3/l Library / uid.html ) giúp bạn thuận tiện cách sử dụng dữ liệu (như số nguyên 128 bit, chuỗi hex, v.v.).
Chúc may mắn!
PS: Cuộc gọi quy trình con có thể được thay thế bằng ctypes gọi trực tiếp kernel / DLL của Windows. Nhưng với mục đích của tôi, chức năng này là tất cả những gì tôi cần. Nó xác nhận mạnh mẽ và tạo ra kết quả chính xác.