使用Python枚举CD驱动器(Windows)

2 投票
5 回答
4405 浏览
提问于 2025-04-15 19:26

我怎么才能找到可用的CD/DVD驱动器的盘符呢?

我在Windows上使用的是Python 2.5.4。

5 个回答

2

通过使用Python for Windows扩展,你可以这样做:

[drive for drive in win32api.GetLogicalDriveStrings().split('\x00')[:-1] 
 if win32file.GetDriveType(drive)==win32file.DRIVE_CDROM]

这个内容是改编自这篇帖子

这样做的话,即使光驱里没有光盘,你也能获取到驱动器的字母。

10

使用win32api,你可以获取驱动器的列表,然后通过GetDriveType来检查每个驱动器的类型。你可以通过'Python for Windows Extensions'或者ctypes模块来访问win32api。

下面是一个使用ctypes的例子:

import string
from ctypes import windll

driveTypes = ['DRIVE_UNKNOWN', 'DRIVE_NO_ROOT_DIR', 'DRIVE_REMOVABLE', 'DRIVE_FIXED', 'DRIVE_REMOTE', 'DRIVE_CDROM', 'DRIVE_RAMDISK']

def get_drives():
    drives = []
    bitmask = windll.kernel32.GetLogicalDrives()
    for letter in string.uppercase:
        if bitmask & 1:
            drives.append(letter)
        bitmask >>= 1

    return drives

for drive in get_drives():
    if not drive: continue
    print "Drive:", drive
    try:
        typeIndex = windll.kernel32.GetDriveTypeW(u"%s:\\"%drive)
        print "Type:",driveTypes[typeIndex]
    except Exception,e:
        print "error:",e

这个例子会输出:

Drive: C
Type: DRIVE_FIXED
Drive: D
Type: DRIVE_FIXED
Drive: E
Type: DRIVE_CDROM
2

如果你使用 WMI模块,那就非常简单了:

import wmi
c = wmi.WMI()
for cdrom in c.Win32_CDROMDrive():
    print cdrom.Drive, cdrom.MediaLoaded

这里的 Drive 属性可以告诉你光驱的盘符,而 MediaLoaded 则可以告诉你光驱里是否有东西。

如果你不知道,WMI 是 Windows管理工具 的缩写,它是一个可以让你查询系统管理信息的接口。简单来说,WMI 是 Windows 对 通用信息模型 标准的实现。Python 的 WMI模块让你可以轻松访问 Windows 的 WMI 调用。

在上面的代码中,我们查询了 Win32_CDROMDrive WMI 类,以了解系统中的光驱信息。这会给我们一个包含很多属性的对象列表,告诉我们关于光驱的所有信息。我们只关注盘符和媒体状态,因为这就是我们现在需要知道的。

撰写回答