BianQue(扁鹊):一个纯 Python 的硬件验机工具,顺便给孩子们当 Python 案例

我最近越来越懒,也越来越想把手里那些零零碎碎的工作流,尽量都用 Python 来实现。倒不是说 Python 有多好,主要是它什么都有现成的库,写起来快,改起来也快,跑到哪儿都行。之前弄过命令行的邮件工具 FengTang,弄过给论文 PDF 改名的 Chou,这回轮到验机了。

事情是这样的,现在电脑也都比较贵,有的老师和同学甚至准备考虑买二手电脑,反正不管是新电脑还是二手电脑,到手第一件事得验机——屏幕有没有坏点,摄像头能不能成像,麦克风扬声器灵不灵,键盘每个键是不是都响,散热会不会过热降频,电池健康度怎么样,固态硬盘读写速度达不达标。

这些东西去网上找一圈,要么是收费软件,要么是那种绿色单文件但塞了一堆广告的,要么就只支持 Windows。我们专业的同学可能用Linux多一些,那我就想,这玩意儿咱们用 Python 攒一个不行吗。

名字我起叫 BianQue,扁鹊。扁鹊是神医,望闻问切四诊法。你发现没有,验机其实也是这四个字:望,看屏幕看摄像头;闻,听扬声器听麦克风;问,把 CPU、内存、显卡、磁盘的信息都问出来;切,给 CPU 加压摸摸它热不热。所以叫扁鹊,我觉得挺贴切。

这个是用 PySide6 做的界面,其实还是沿袭了我这么多年的老一套 GUI 开发的套路,左边一列导航,右边十三个检测页:硬件总览、屏幕、摄像头、麦克风、扬声器、键盘、鼠标、散热、电池、磁盘、内存、网络、报告。

BianQue 硬件总览

有几个地方做得有点呆,比如是屏幕坏点检测,点进去会全屏显示纯色,红绿蓝白黑灰六种颜色轮着来,你盯着看有没有亮点暗点就行。这里有个小细节:提示文字要是固定停在屏幕一个角,那那个角的坏点你就永远看不见了,所以我让它沿着屏幕边缘慢慢漂移,不挡任何地方。再一个是键盘检测,画了个虚拟键盘在屏幕上,你按哪个键它就变绿,全按绿了就说明都灵。这里头 Tab 键是个坑,Qt 默认拿它来切焦点,一开始死活映射不到,后来是重写了焦点切换的方法才搞定。麦克风那页显示一个实时电平表,你对着说话它就跳,还能录三秒回放给你听。扬声器是分开测左右声道的,先放一个只有左声道有声音的音,再放一个只有右声道的,你一听就知道喇叭接反没有。

BianQue 屏幕检测

BianQue 散热压力测试

信息采集这块也尽量往深里挖。CPU 能读到每核心的占用率,Apple Silicon 上还能分出性能核和能效核各几个;内存能读到每根内存的厂商、类型、容量,Windows 上还能读速度和通道数;显卡能读到芯片型号和它支持的图形接口,我这台读出来是 Metal 4;磁盘能分辨固态还是机械,读 SMART 健康状态。这些在 macOS 上有些拿不到——比如 Apple Silicon 的内存时序和频率,系统根本不暴露——读不到的我就不硬编,直接标个 N/A。

界面做了十种语言,中英日法俄德葡西韩意,菜单栏一换,整个界面和导出的报告都跟着换。

BianQue 英文界面

我琢磨着,这东西还有个用处,就是上课。给大一的新生讲 Python,最怕的就是例子太抽象,什么"计算 1 到 100 的和",写出来中规中矩,但是我自己都觉得困啊,而且这么抽象,可能学生不知道这玩意儿到底能干嘛。这个工具就不一样:读硬件信息用的是 psutil 和系统命令,界面是 PySide6,生成测试音是 numpy 算正弦波,录音是 sounddevice,全是真实的东西,跑起来立刻能看到结果——屏幕上真的出来你自己的摄像头画面,麦克风电平真的在跳。跟学生说"你们现在学的这些库,就能做出一个完整的验机软件",比讲一百遍"Python 能做什么"都管用。

安装就一行:pip install bianque,然后敲 bianque 就起来了。代码在 GitHub 上,地址是 https://github.com/cycleuser/BianQue ,PyPI 上是 https://pypi.org/project/bianque/ ,协议用的 GPL。

当然这东西也糙,很多边界情况没处理,温度在 macOS 上读不到我也就摆烂了。但自己用、验个机、给学生当个例子,对付着也够了。有兴趣的可以克隆代码下来玩玩,有想加的检测项也欢迎提交改进。