当我想让我的Windows电脑运行一个Python脚本,当它检测到一个具有特定名称的闪存驱动器(例如“我的驱动器”)已被插入。
我怎样才能做到这一点?
我应该在Windows中使用某种工具,还是有办法编写另一个Python脚本,以便在插入闪存驱动器后立即检测其是否存在? (如果脚本在电脑上,我更喜欢它。)
(我是一个编程新手..)
虽然你可以使用类似于'inpectorG4dget'的方法,但是效率会很低。
你需要使用Win API。 此页面可能对您有用: 链接
并使用Win API的Python中检查此链接: 链接
那么,如果你在Linux发行版上,那么这个问题就可以得到答案。
我可以为你的问题想一个圆满的(而不是优雅的)解决方案,但至少它会工作。
每次将闪存驱动器插入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
建立在“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."