2015-07-15 4 views
0

На платформе linux мне нужно найти product_id, vendor_id и адрес интерфейса с его именем из cli. Я использую следующие команды:Идентификатор продукта linux ethernet, идентификатор устройства и адрес

# to find addr: 
pci_interface_addr0=$(ethtool -i $eth0 | grep -i bus-info | tail -c 8) 

# to find ids: 
complete_id=$(lspci -nvv | grep $pci_interface_addr0 | awk '{print $3}') 
vendor_id=$(echo $complete_id | cut -d \: -f 1) 
product_id=$(echo $complete_id | cut -d \: -f 2) 

Есть ли лучший подход к этому вопросу? Поскольку у меня есть жестко закодированные значения, такие как tail -c 8 выше.

Можно ли это сделать в python? Поскольку родительская программа является главным образом модулем python.

Цените любые хорошие входы!

ответ

1

Есть ли лучший подход к этому вопросу?

Я бы воспользоваться sysfs файловой системы, как правило, размещается в /sys. Например, если имя интерфейса enp0s25 на моей системе, я могу найти поставщика в:

$ cat /sys/class/net/enp0s25/device/vendor 
0x8086 

и идентификатор продукта в:

$ cat /sys/class/net/enp0s25/device/device 
0x1502 

uevent файл в том же каталоге, содержит эту информацию в форма, которая может быть легко отправлена ​​в сценарий оболочки:

$ cat /sys/class/net/enp0s25/device/uevent 
DRIVER=e1000e 
PCI_CLASS=20000 
PCI_ID=8086:1502 
PCI_SUBSYS_ID=17AA:21F3 
PCI_SLOT_NAME=0000:00:19.0 
MODALIAS=pci:v00008086d00001502sv000017AAsd000021F3bc02sc00i00 
+0

Спасибо @larsks! Очень чистый подход – adict11

+0

Я рад, что это помогло. Вы можете сделать минутку и щелкнуть галочку слева от этого ответа; это как способ сказать «спасибо», так и способ дать другим людям понять, что на ваш вопрос был дан ответ. – larsks

Смежные вопросы