Обнаружение внешнего жесткого диска после изменения буквы в Python
Я пишу программу на Python для сканирования и отслеживания файлов на нескольких внешних жестких дисках. Он сохраняет путь к файлу в виде строки в локальном файле. Проблема в том, что иногда, когда я подключаю внешний жесткий диск к другому компьютеру, буква меняется, а ранее сохраненный путь будет бесполезным. Я хочу отслеживать диск и изменять локальные записи, если тот же жесткий диск подключен, но буква изменилась. Прямо сейчас я могу думать о двух возможностях:
- Сохраните файл идентификации в корне диска и отсканируйте все буквы диска, чтобы найти диск с правильным файлом идентификации.
- Сканируйте все буквы в начале, чтобы обнаружить файл по тому же пути, что и локальная запись. Если найдено, определите диск.
Я хочу знать, существует ли какой-либо существующий идентификатор для жесткого диска (или раздела), который я могу использовать для доступа к диску (кроме буквы диска)?
3 ответа
Используйте идентификатор поставщика и идентификатор устройства для идентификации диска.
#!/usr/bin/python
import sys
import usb.core
# find USB devices
dev = usb.core.find(find_all=True)
# loop through devices, printing vendor and product ids in decimal and hex
for cfg in dev:
sys.stdout.write('Decimal VendorID=' + str(cfg.idVendor) + ' & ProductID=' + str(cfg.idProduct) + '\n')
sys.stdout.write('Hexadecimal VendorID=' + hex(cfg.idVendor) + ' & ProductID=' + hex(cfg.idProduct) + '\n\n')
Используйте PyUSB для поиска поставщиков и идентификаторов продуктов для USB-устройств
Similare вопрос: идентификация устройства USB
Да, вы можете использовать серийный номер тома для идентификации жесткого диска. Серийный номер тома генерируется Windows при создании или форматировании раздела.
Вы должны быть в состоянии сделать это через Python с кодом ниже, заменив c
с вашим желаемым разделом.
import subprocess
subprocess.check_output(["vol", "C:"])
найти как usb, так и внешний жесткий диск
import wmi
import os
w = wmi.WMI()
for drive in w.Win32_LogicalDisk():
print(drive)
if drive.VolumeDirty == True:
print (drive.Caption, drive.VolumeName, drive.DriveType)