#python-3.x #usb
Вопрос:
Что мне нужно сделать, так это создать каталог внутри USB-устройства с помощью запуска Backup.exe(Backup.py) внутри USB-устройства.
Я имею в виду, когда Backup.exe выполнить с USB-устройства, backup.exe определите USB — устройство и создайте папку резервной копии на USB-устройстве.
Я жестко кодирую USB — устройство и dir_path
if "Removable Disk" in disk.Description or "My Passport" == disk.VolumeName: dir_path = r'I:\'
Есть ли лучший способ сделать это автоматически без жесткого диска.Описание и dir_path?
#pip install WMI import wmi import os letter = wmi.WMI() def disk_info(): for disk in letter.Win32_LogicalDisk(): if "Removable Disk" in disk.Description or "My Passport" == disk.VolumeName: print("="*20, "USB Letter Information", "="*20) Description = disk.Description DeviceID = disk.DeviceID VolumeName = disk.VolumeName return Description, DeviceID,VolumeName break info = disk_info() print(info) dir_name = ("Backup") #dir_path = dir_path = r'I:\' file_path = os.path.join(dir_path, dir_name) if not os.path.exists(file_path): os.makedirs(file_path) print("Folder created in ==gt;", info)
Вывод:
==================== USB Letter Information ==================== ('Removable Disk', 'I:', 'KINGSTON') Folder created in ==gt; ('Removable Disk', 'I:', 'KINGSTON') gt;gt;gt;
Обновление 1:
Я обновил сценарий, и в нем показана информация о USB-накопителе и пути к USB, но по-прежнему не создается папка в USB, и я получаю это сообщение об ошибке.
import os import wmi letter = wmi.WMI() def disk_info(): for disk in letter.Win32_LogicalDisk(): if "Removable Disk" in disk.Description or "My Passport" == disk.VolumeName: print("="*20, "USB Letter Information", "="*20) Description = disk.Description DeviceID = disk.DeviceID VolumeName = disk.VolumeName return Description, DeviceID,VolumeName break info = disk_info() print(info) def device_id(): for disk in letter.Win32_DiskDrive(): if "USB" in disk.InterfaceType: DeviceID = disk.DeviceID return DeviceID dev_id = device_id() print(dev_id) dir_name = ("Backup") dir_path = dev_id #dir_path = r'I:\' file_path = os.path.join(dir_path, dir_name) if not os.path.exists(file_path): os.makedirs(file_path) print("Folder created in ==gt;", dev_id )
Вывод:
==================== USB Letter Information ==================== ('Removable Disk', 'I:', 'ESD-USB') \.PHYSICALDRIVE2 Traceback (most recent call last): mkdir(name, mode) PermissionError: [WinError 31] A device attached to the system is not functioning: '\\.\PHYSICALDRIVE2\
Комментарии:
1. Из чтения вашего кода и выходных данных видно, что буква диска находится внутри
disk.DeviceID
, и в коде, который вы опубликовали, это будетI:
.2. @KenWhite Да, потому что у меня есть жестко закодированная буква драйвера, как вы видите в dir_path, которая не работает с другими usb и компьютером
3.
dir_path
вообще не используется в вашейdisk_info
функции, и ниdir_name
то , ни другое, поэтому я не вижу, как это может иметь к этому какое-либо отношение.4. Ни
file_path
то , ни другое, что является объединеннымdir_path
иdir_name
. Фактически,disk_info
вызывается до того, как они будут объявлены или им будут присвоены значения.5. @KenWhite Хорошо, как я могу использовать dir_path в моем disk_info? Я довольно новичок в python