

Python,速成心法
敲代码,查资料,问Ai
练习,探索,总结,优化

★★★★★博文创作不易,源码代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
Python打包教程07:还不会用--add-data参数,添加资源文件吗?
Python打包教程04:UPX安装与使用(减小.exe体积)
Python打包教程03:PyInstaller命令使用指南
Python教程:PyCharm安装过程中遇到的中英文对照表
Python教程110:单线程和多线程源码演示(threading)
Python教程108:针对面向对象Class类知识要点,源码示例再演示。
Python入门教程04:流程控制语句(if+for+continue等)
↓ 完整源码如下 ↓
# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonimport subprocessimport platformimport reimport sysdef run_command(cmd):"""运行命令并返回输出字符串(忽略错误)"""try:result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=5)return result.stdout.strip()except:return ""def get_cpu_serial():"""获取 CPU 序列号/ID"""system = platform.system()if system == "Windows":out = run_command("wmic cpu get processorid")# 输出格式类似:ProcessorId \n ABCDEF12345678for line in out.splitlines():if line.strip() and not line.startswith("ProcessorId"):return line.strip()elif system == "Linux":# 读取 /proc/cpuinfo 中的 Serial 或 processor idwith open("/proc/cpuinfo", "r") as f:for line in f:if "serial" in line.lower():return line.split(":")[1].strip()if "processor" in line.lower() and "id" in line.lower():return line.split(":")[1].strip()elif system == "Darwin": # macOS# macOS 使用 sysctl,但通常不提供 CPU 序列号,返回型号标识out = run_command("sysctl -n machdep.cpu.brand_string")return outreturn "N/A"def get_disk_volume_serial(drive="C:"if platform.system() == "Windows"else"/"):"""获取指定磁盘的卷序列号(Windows: 盘符,Linux/macOS: 挂载点)"""system = platform.system()if system == "Windows":out = run_command(f"wmic logicaldisk where deviceid='{drive}' get volumeserialnumber")for line in out.splitlines():if line.strip() and not line.startswith("VolumeSerialNumber"):return line.strip()elif system == "Linux":# 使用 blkid 获取 UUID(可作为卷标识)out = run_command(f"blkid {drive} | grep -o 'UUID=\"[^\"]*\"' | cut -d'\"' -f2")if out:return out# 备选:lsblkout = run_command(f"lsblk -o UUID {drive} -n 2>/dev/null")if out:return outelif system == "Darwin":out = run_command(f"diskutil info {drive} | grep 'Volume UUID' | awk '{{print $3}}'")if out:return outreturn "N/A"def get_mac_address():"""获取网卡 MAC 地址(第一个非虚拟网卡)"""try:import uuidmac = uuid.getnode()if mac:# 格式化为 xx:xx:xx:xx:xx:xxreturn ':'.join(('%012X' % mac)[i:i+2] for i in range(0, 12, 2))except:pass# 备选:使用 psutil(需要安装)try:import psutilfor iface, addrs in psutil.net_if_addrs().items():for addr in addrs:if addr.family == psutil.AF_LINK and addr.address != "00:00:00:00:00:00":return addr.addressexcept ImportError:pass# 备选:系统命令system = platform.system()if system == "Windows":out = run_command("getmac /v /fo csv | findstr /v /i 'Ndis'")for line in out.splitlines():parts = line.replace('"', '').split(',')if len(parts) >= 2 and re.match(r'([0-9A-F]{2}-){5}[0-9A-F]{2}', parts[1], re.I):return parts[1].replace('-', ':')elif system == "Linux":out = run_command("cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address")if out:return outelif system == "Darwin":out = run_command("ifconfig en0 | awk '/ether/ {print $2}'")if out:return outreturn "N/A"def get_mainboard_serial():"""获取主板序列号"""system = platform.system()if system == "Windows":out = run_command("wmic baseboard get serialnumber")for line in out.splitlines():if line.strip() and not line.startswith("SerialNumber"):return line.strip()elif system == "Linux":# 需要 root 权限,尝试 dmidecodeout = run_command("sudo dmidecode -s baseboard-serial-number 2>/dev/null")if out and "Not Settable" not in out:return out# 备选:/sys/class/dmi/id/board_serialtry:with open("/sys/class/dmi/id/board_serial", "r") as f:return f.read().strip()except:passelif system == "Darwin":out = run_command("ioreg -l | grep board-id | awk -F'\"' '{print $4}'")if out:return outreturn "N/A"def get_bios_uuid():"""获取 BIOS UUID / 系统 UUID"""system = platform.system()if system == "Windows":out = run_command("wmic csproduct get uuid")for line in out.splitlines():if line.strip() and not line.startswith("UUID"):return line.strip()elif system == "Linux":# 尝试 dmidecodeout = run_command("sudo dmidecode -s system-uuid 2>/dev/null")if out and "Not Settable" not in out:return out# 备选:/sys/class/dmi/id/product_uuidtry:with open("/sys/class/dmi/id/product_uuid", "r") as f:return f.read().strip()except:passelif system == "Darwin":out = run_command("ioreg -l | grep IOPlatformUUID | awk -F'\"' '{print $4}'")if out:return outreturn "N/A"if __name__ == "__main__":print("CPU 序列号: ", get_cpu_serial())print("硬盘卷序列号: ", get_disk_volume_serial())print("网卡 MAC 地址: ", get_mac_address())print("主板序列号: ", get_mainboard_serial())print("BIOS UUID: ", get_bios_uuid())
完毕!!感谢您的收看
------★★历史博文集合★★------
