【发布时间】:2009-12-28 08:26:50
【问题描述】:
我想让我的 Windows 计算机在检测到已插入具有特定名称(例如“我的驱动器”)的闪存驱动器时运行 Python 脚本。
我怎样才能做到这一点?
我应该在 Windows 中使用一些工具,还是有办法编写另一个 Python 脚本,以便在插入闪存驱动器后立即检测它是否存在? (如果脚本在计算机上,我会更喜欢它。)
(我是一个编程新手..)
【问题讨论】:
我想让我的 Windows 计算机在检测到已插入具有特定名称(例如“我的驱动器”)的闪存驱动器时运行 Python 脚本。
我怎样才能做到这一点?
我应该在 Windows 中使用一些工具,还是有办法编写另一个 Python 脚本,以便在插入闪存驱动器后立即检测它是否存在? (如果脚本在计算机上,我会更喜欢它。)
(我是一个编程新手..)
【问题讨论】:
在“CD”方法的基础上,如果您的脚本枚举驱动器列表,等待几秒钟让 Windows 分配驱动器号,然后重新枚举该列表,该怎么办? python 集可以告诉你发生了什么变化,不是吗?以下对我有用:
# building on above and http://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python
import string
from ctypes import windll
import time
import os
def get_drives():
drives = []
bitmask = windll.kernel32.GetLogicalDrives()
for letter in string.uppercase:
if bitmask & 1:
drives.append(letter)
bitmask >>= 1
return drives
if __name__ == '__main__':
before = set(get_drives())
pause = raw_input("Please insert the USB device, then press ENTER")
print ('Please wait...')
time.sleep(5)
after = set(get_drives())
drives = after - before
delta = len(drives)
if (delta):
for drive in drives:
if os.system("cd " + drive + ":") == 0:
newly_mounted = drive
print "There were %d drives added: %s. Newly mounted drive letter is %s" % (delta, drives, newly_mounted)
else:
print "Sorry, I couldn't find any newly mounted drives."
【讨论】:
好吧,如果您使用的是 Linux 发行版,那么 SO 上的 this question 会给出答案。
我可以为您的问题想出一个迂回(不优雅)的解决方案,但至少它会起作用。
每次将闪存驱动器插入 USB 端口时,Windows 操作系统都会为其分配一个驱动器号。出于讨论的目的,我们称该字母为“F”。
这段代码看看我们是否可以 cd 进入f:\。如果可以 cd 进入f:\,那么我们可以断定“F”已被分配为驱动器号,并且假设您的闪存驱动器总是被分配给“F”,我们可以断定您的闪存驱动器已插入。
import os
def isPluggedIn(driveLetter):
if os.system("cd " +driveLetter +":") == 0: return True
else: return False
【讨论】:
import subprocess
out = subprocess.check_output('wmic logicaldisk get DriveType, caption', shell=True)
for drive in str(out).strip().split('\\r\\r\\n'):
if '2' in drive:
drive_litter = drive.split(':')[0]
drive_type = drive.split(':')[1].strip()
#print(drive_litter, drive_type)
if drive_type == '2':
print('Removable disk detected')
【讨论】: