You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现跨Windows用户账户的BIOS序列号保存至Pictures目录的通用Python方案

如何让Python代码跨Windows用户保存文件到Pictures目录并获取BIOS序列号

你的核心问题在于硬编码了用户名路径,以及没有正确处理命令输出和环境变量展开。下面给你两个可靠的解决方案,先看最简单的实现:

方案一:使用Path.home()或USERPROFILE环境变量(简单通用)

这个方法适用于大多数默认配置的Windows系统,无需额外安装库:

import os
from pathlib import Path
import subprocess

# 获取当前用户的Pictures目录路径
# 方式1:用pathlib(推荐,更简洁)
pictures_dir = Path.home() / "Pictures"
save_path = pictures_dir / "SerialNumber.txt"

# 方式2:用os模块(兼容旧版Python)
# save_path = os.path.join(os.environ['USERPROFILE'], 'Pictures', 'SerialNumber.txt')

# 获取BIOS序列号并处理输出
serial_cmd = "wmic bios get serialnumber"
result = subprocess.getoutput(serial_cmd)
# 清理输出:去掉标题行和多余空白
serial_number = result.replace("SerialNumber", "").strip()

# 写入文件
with open(save_path, 'w') as f:
    f.write(serial_number)

为什么之前的代码出错?

  1. 硬编码用户名:C:\\Users\\Jarvis只能在Jarvis用户下生效,换成Path.home()或os.environ['USERPROFILE']会自动适配当前登录用户。
  2. 错误处理命令输出:你之前用os.system()的返回值写入文件,但os.system()返回的是命令的退出状态码(0表示成功,非0失败),不是命令的实际输出内容。用subprocess.getoutput()才能拿到wmic命令的输出。
  3. 环境变量未展开:%UserProfile%在Python字符串里不会自动解析,需要用os.environ['USERPROFILE']或者os.path.expandvars("%UserProfile%\\Pictures\\...")来展开。

方案二:获取系统官方的Pictures路径(更准确,支持自定义位置)

如果用户修改了Pictures文件夹的默认位置(比如移到D盘),方案一可能失效。这时可以用Windows API获取官方的已知文件夹路径,需要先安装pywin32库:

pip install pywin32

然后代码如下:

import os
import win32com.shell.shell as shell
import subprocess

# 获取Pictures文件夹的官方路径(支持自定义位置)
FOLDERID_Pictures = "{33E28130-4E1E-4676-835A-98395C3BC3BB}"
pictures_path = shell.SHGetKnownFolderPath(FOLDERID_Pictures)
save_path = os.path.join(pictures_path, "SerialNumber.txt")

# 获取并处理BIOS序列号
serial_cmd = "wmic bios get serialnumber"
result = subprocess.getoutput(serial_cmd)
serial_number = result.replace("SerialNumber", "").strip()

# 写入文件
with open(save_path, 'w') as f:
    f.write(serial_number)

这个方法会直接调用Windows系统API获取Pictures文件夹的实际位置,无论用户怎么修改都能正确找到。

额外优化建议

  • 避免使用start cmd /k:这个命令会弹出命令行窗口,直接执行wmic命令即可,不需要启动新的cmd窗口。
  • 处理可能的异常:比如获取Pictures目录失败、BIOS序列号无法获取的情况,可以添加try-except块增强鲁棒性:
try:
    with open(save_path, 'w') as f:
        f.write(serial_number)
    print(f"BIOS序列号已保存到:{save_path}")
except Exception as e:
    print(f"保存文件失败:{str(e)}")

内容的提问来源于stack exchange,提问作者user16826661

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:52:43