我如何获得 serial number
hard disk
Python
Linux
我想使用 Python 模块来执行此操作,而不是运行诸如 hdparm
之类的外部程序。也许使用 fcntl
模块?
原文由 Forge 发布,翻译遵循 CC BY-SA 4.0 许可协议
我如何获得 serial number
hard disk
Python
Linux
我想使用 Python 模块来执行此操作,而不是运行诸如 hdparm
之类的外部程序。也许使用 fcntl
模块?
原文由 Forge 发布,翻译遵循 CC BY-SA 4.0 许可协议
拿一把螺丝刀打开箱子;-)
如果你在 Windows 上,这可能会成功
import win32api
print win32api.GetVolumeInformation("C:\\")
为此,您需要适用于 Windows 的 Mark Hammond 模块 http://python.net/crew/mhammond/
原文由 Fredrik Pihl 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答857 阅读✓ 已解决
Linux
正如您所建议的, fcntl 是在 Linux 上执行此操作的方法。您要翻译的 C 代码如下所示:
在 Ubuntu 9.10 上翻译成 Python,它有点像这样:
抱歉篇幅太长,我认为将原始 C 结构作为注释包含在内很有用。此外,我对
fcntl
和struct
模块都很陌生,所以我可能正在做一些单一的事情。无论如何,从命令行(使用 root 权限)运行它看起来像这样(为了隐私我已经编辑了我的确切序列):这里发生了什么?
为了能够理解这里发生了什么,您需要查看原始 C 程序中的
#include <linux/hdreg.h>
。这包括导入HDIO_GET_IDENTITY
常量和struct hd_driveid
。我已经将结构作为注释复制到上面的python源代码中,所以我不再重复。要找出HDIO_GET_IDENTITY
发生了什么,grep 源代码(在 Ubuntu 上是/usr/include/linux/hdreg.h
。你应该找到这样的东西:因此,您会发现
HDIO_GET_IDENTITY
只是一个常量,告诉 fcntl 您有兴趣获取高清信息。您会注意到,相同的值(0x030d
是十六进制表示法中的整数)被分配给 python 代码中的变量。视窗
我知道您现在对 Linux 很感兴趣,但为了后代,我会把它留在这里。以下将在 Windows 上获取硬盘序列号(您需要安装 wmi 包):