Python 检测 USB 驱动器并分配驱动器字母?
这里有个问题。我们有几百个外部的500GB USB硬盘。每个硬盘在一年中会被带到不同的地方。我们想知道,怎样才能自动检测到一个USB硬盘被插入到Windows系统中,然后给它分配一个Z:\的驱动器字母?因为这些USB硬盘会插到很多不同的电脑上,所以像这样的脚本
import subprocess
diskpart_data = "z-drive.txt"
open (diskpart_data, "w").write ("""
select volume F:
assign letter=Z
""")
subprocess.call ('diskpart /s %s' % diskpart_data)
在不同的Windows系统上使用起来就很麻烦,因为USB硬盘的位置总是变化的。你能通过WMI自动检测到它们,或者用NTFS做某种卷挂载吗?
2 个回答
1
你可以试着把那个脚本编译成一个exe文件,然后在USB闪存中创建一个自动运行的文件,让它可以自动运行这个脚本。这样,脚本就可以执行它的操作了。至于如何给Z:\这个盘符分配,我建议你可以使用Win32Com(虽然我不确定它是否能处理这个问题),或者使用ctypes,这样你就可以控制Windows的动态链接库(dll)了。
2
正如terabytest所说,你可以通过在驱动器根目录下的autorun.inf文件运行一个脚本。个人来说,我会使用一个批处理脚本:
(echo select volume %~d0 && echo assign letter=Z) | diskpart
这里的%~d0
可以获取当前执行的批处理文件所在的驱动器字母。
如果这还不够,还有一种方法可以在插入可移动驱动器时得到通知,这需要使用Windows API的设备管理功能。你需要先使用RegisterDeviceNotification()
来注册通知,然后在事件循环中处理WM_DEVICECHANGE
消息。不幸的是,这需要一个事件循环,而我不知道你如何能在Python中轻松创建一个(除了从头开始创建:这里有一个示例消息循环,注意在你的情况下你不需要创建窗口,只需要有一个消息循环)。