我想讓我的Windows計算機在檢測到具有特定名稱的閃存驅動器(例如「我的驅動器」)已插入時運行Python腳本。如何使用Python檢測Windows中的閃存驅動器插件?
我該如何實現這一目標?
我應該在Windows中使用某種工具還是有辦法編寫另一個Python腳本,以便在插入閃存驅動器後立即檢測閃存驅動器的存在? (我寧願它如果腳本是在計算機上。)
(我是一個新手編程..)
我想讓我的Windows計算機在檢測到具有特定名稱的閃存驅動器(例如「我的驅動器」)已插入時運行Python腳本。如何使用Python檢測Windows中的閃存驅動器插件?
我該如何實現這一目標?
我應該在Windows中使用某種工具還是有辦法編寫另一個Python腳本,以便在插入閃存驅動器後立即檢測閃存驅動器的存在? (我寧願它如果腳本是在計算機上。)
(我是一個新手編程..)
好吧,如果你是一個Linux發行版,然後this question對SO將有答案。
我可以爲您的問題想一個圓的(而不是優雅的)解決方案,但至少它會工作。
每次將閃存驅動器插入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
這可行,但需要安裝至少一個附加模塊 – inspectorG4dget 2009-12-29 06:46:53
建立在「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."
但驅動器不會總是分配給同一個字母。我如何解釋這一點? – 2009-12-28 17:32:10
就是這樣。我想不出一種能夠立即做到這一點的方法。但至少,這是一個部分解決方案。我只發佈了它,因爲當時沒有其他解決方案。所以我認爲部分解決方案總比沒有解決方案好 – inspectorG4dget 2009-12-29 06:42:02