USB Stick在Python中的序列号

时间:2013-09-10 18:17:17

标签: python linux python-2.7 ioctl fcntl

我正在尝试使用Linux上的Python获取USB闪存驱动器的序列号(或任何基于硬件的唯一标识符)。我从this SO question中找到的食谱开始。

该链接中的代码非常适合固定硬盘。例如,在我的内置笔记本电脑SSD上,它返回:

$ sudo python clusterTool.py /dev/sda
Hard Disk Model: SAMSUNG SSD PM810 2.5" 7mm 256GB
  Serial Number: S0NUNYAB503012

摇摆!

然而,当我在一个闪存棒上运行它时,我从ioctl得到一个错误,该错误正在被非常地跟随下面的python跟踪:

$ sudo python clusterTool.py /dev/sdb
Traceback (most recent call last):
  File "clusterTool.py", line 21, in 
    buf = fcntl.ioctl(fd, HDIO_GET_IDENTITY, " " * sizeof_hd_driveid)
IOError: [Errno 22] Invalid argument

文件暗示他们是同一种野兽:

$ file /dev/sd{a,b}
/dev/sda: block special
/dev/sdb: block special

我不确定它们有何不同,但它们显然在某处分歧。这些设备之间有什么区别,有什么办法可以统一获取标识符吗?

1 个答案:

答案 0 :(得分:0)

这可能有助于http://www.roman10.net/linux-get-udev-device-information-in-pythonpyudev/使用syspath的pyudev和python设置工具。