python / windows - 仅列出usb可移动驱动器

时间:2012-09-04 14:58:51

标签: python windows pywin32 drives

是否可以使用python在Windows上只获取可移动的USB驱动器和(不是必需的)标签?在linux(ubuntu)上,您只需要列出/media文件夹。

这是我当前的代码(列出所有可用的驱动器号,包括系统驱动器,cd / dvd驱动器等):

import win32api

dv = win32api.GetLogicalDriveStrings()
dv = dv.split('\000')[:-1]
print dv

结果是这样的: ['C:\\', 'D:\\', 'E:\\']

我只想要usb大容量存储驱动器......任何帮助?

...问候

4 个答案:

答案 0 :(得分:0)

import win32file

def rdrive(d):
    # returns boolean, true if drive d is removable
    return win32file.GetDriveType(d)==win32file.DRIVE_REMOVABLE

答案 1 :(得分:0)

您还可以使用ctypes模块获取可移动驱动器列表。

from ctypes import windll    
def get_drives():
        drives = []
        bitmask = windll.kernel32.GetLogicalDrives()
        for letter in map(chr, range(65, 91)):
            if bitmask & 1:
                drives.append(letter)
            bitmask >>= 1
        return drives

您可以使用相同的列表,并将其与新的驱动器列表进行比较,以添加可移动驱动器。

    drives_list=get_drives()
    drives_list1=[]
    while True:
      drives_list1=get_drives()
      if len(list(set(drives_list1) - set(drives_list))) > 0:
            print("Drives Added"+str(set(drives_list1) - set(drives_list)))

有关更多信息,请参见github上的此仓库drivemonitoring

答案 2 :(得分:0)

我自己也有类似的问题。使用@ user2532756的答案中的逻辑,我将这个快速功能组合在一起,以解决该问题的所有新访客:

基本上,只需调用该函数,它就会将所有可移动驱动器中的list 返回给调用者。

import win32api
import win32con
import win32file

def get_removable_drives():
    drives = [i for i in win32api.GetLogicalDriveStrings().split('\x00') if i]
    rdrives = [d for d in drives if win32file.GetDriveType(d) == win32con.DRIVE_REMOVABLE]
    return rdrives

例如:get_removable_drives()的调用将输出:

['E:\\']

答案 3 :(得分:0)

psutil 库比 win32api 好得多。它提供了大量有关驱动器的信息并且格式很好。 https://github.com/giampaolo/psutil

import psutils as p
externals = [i.mountpoint for i in p.disk_partitions() if 'removable' in i.opts]