2009-12-28 5 views
5

Ich möchte, dass mein Windows-Computer ein Python-Skript ausführt, wenn festgestellt wird, dass ein Flash-Laufwerk mit einem bestimmten Namen (z. B. "My drive") eingesteckt wurde.Wie erkennt man Flash-Laufwerk-Plugin in Windows mit Python?

Wie kann ich das erreichen?

Sollte ich ein Tool in Windows verwenden oder gibt es eine Möglichkeit, ein weiteres Python-Skript zu schreiben, um das Vorhandensein eines Flash-Laufwerks zu erkennen, sobald es angeschlossen ist? (Ich würde es vorziehen, wenn das Skript auf dem Computer ist.)

(I eine Programmierung Neuling bin ..)

Antwort

3

Nun, wenn Sie auf einer Linux-Distribution seid, dann this question auf SO haben würde die Antwort.

Ich kann an eine runde (nicht elegante) Lösung für Ihr Problem denken, aber zumindest würde es funktionieren.

Jedes Mal, wenn Sie Ihr Flash-Laufwerk an einen USB-Anschluss anschließen, weist das Windows-Betriebssystem diesem einen Laufwerksbuchstaben zu. Für die Zwecke dieser Diskussion nennen wir diesen Buchstaben "F".

Dieser Code sieht aus, ob wir in f:\ cd können. Wenn es möglich ist, in f:\ zu cd, können wir schließen, dass "F" als Laufwerksbuchstabe zugewiesen wurde, und unter der Annahme, dass Ihr Flash-Laufwerk immer "F" zugewiesen wird, können wir schließen, dass Ihr Flash-Laufwerk wurde eingesteckt.

import os 
def isPluggedIn(driveLetter): 
    if os.system("cd " +driveLetter +":") == 0: return True 
    else: return False 
+1

Aber das Laufwerk wird nicht immer dem gleichen Buchstaben zugewiesen. Wie kann ich das erklären? –

+0

Das ist genau das Richtige. Ich kann mir keinen Weg vorstellen, dies sofort zu tun. Aber zumindest ist dies eine Teillösung. Ich habe es nur gepostet, weil es zu der Zeit keine andere Lösung gab. Also dachte ich, eine Teillösung wäre besser als gar keine – inspectorG4dget

4

Obwohl Sie eine ähnliche Methode wie 'inpectorG4dget' vorschlagen können, aber das wird sehr ineffizient sein.

Sie müssen Win API dafür verwenden. Diese Seite könnte für Sie von Nutzen sein: Link

Und Win-API in Python verwenden Sie diesen Link finden Sie unter: Link

+0

Das funktioniert, aber erfordert die Installation von mindestens einem zusätzlichen Modul – inspectorG4dget

3

Aufbauend auf der „CD“ -Ansatz, was passiert, wenn das Skript die Liste der Laufwerke aufgezählt, wartete ein paar Sekunden für Windows den Laufwerksbuchstaben zuweisen, dann die Liste erneut aufgezählt? Ein Python-Set könnte dir sagen, was sich geändert hat, oder? Folgendes funktionierte für mich:

# 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." 
Verwandte Themen