2013-09-10 4 views
4

Я пытаюсь получить серийный номер (или любой уникальный аппаратный идентификатор) USB-накопителя с использованием Python в Linux. Я начал с рецепта, который я нашел в this SO question.USB Stick серийный номер в Python

Код в этой ссылке отлично подходит для стационарных жестких дисков. Например, на моем внутреннем накопителе SSD он возвращает:

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

Качание!

Однако, когда я запускаю его на флэш-палки, я получаю ошибку из IOCTL, что становится неизящно coherced к следующему питона следа:

 
$ 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 

Я не уверен, как они отличаются друг от друга, но они явно расходятся. В чем разница между этими устройствами, и есть ли какой-либо способ равномерно получить их идентификаторы?

+0

У меня есть временное решение, которое включает в себя очищение вывода [this] (http://stackoverflow.com/questions/8653505/read-usb-serial-code-in-bash-using-udevadm) хак-уродливый и зависит от сценариев оболочки и т. д. Ищете реальный ответ. – meawoppl

ответ