2009-12-28 15 views
5

Quiero hacer que mi computadora Windows ejecute un script Python cuando detecta que una unidad flash que tiene un nombre particular (por ejemplo, "Mi unidad") ha sido enchufado.Cómo detectar el complemento de la unidad flash en Windows con Python?

¿Cómo puedo lograr esto?

¿Debo usar alguna herramienta en Windows o hay alguna manera de escribir otra secuencia de comandos de Python para detectar la presencia de una unidad flash tan pronto como se enchufa? (Yo preferiría que el guión estaba en la computadora.)

(Soy un novato de programación ..)

Respuesta

3

Bueno, si estás en una distribución de Linux, a continuación, en this question SO tendría la respuesta.

Puedo pensar en una solución redonda (no elegante) para su problema, pero al menos funcionaría.

Cada vez que inserta su unidad flash en un puerto USB, el sistema operativo Windows le asigna una letra de unidad. A los efectos de esta discusión, llamemos a esa letra 'F'.

Este código busca ver si podemos hacer un cd en f:\. Si es posible hacer un cd en f:\, podemos concluir que 'F' ha sido asignada como letra de unidad, y bajo el supuesto de que su unidad flash siempre se asigna a 'F', podemos concluir que su unidad flash ha sido enchufado.

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

Pero el disco no siempre se asignará a la misma letra. ¿Cómo puedo dar cuenta de eso? –

+0

Eso es lo único. No puedo pensar en una manera de hacerlo de inmediato. Pero al menos, esta es una solución parcial. Solo lo publiqué porque no había otra solución en ese momento. Así que pensé que una solución parcial sería mejor que nada – inspectorG4dget

4

aunque se puede utilizar un método similar al sugerido 'inpectorG4dget', pero que será mucho más ineficiente.

Necesita usar Win API para esto. Esta página puede ser de utilidad para usted: Link

Y para usar Win API en Python comprobar este acoplamiento a cabo: Link

+0

Esto funciona, pero requiere la instalación de al menos un módulo adicional – inspectorG4dget

3

Sobre la base del enfoque de "CD", ¿y si la secuencia de comandos enumeró la lista de unidades, esperó unos segundos para que Windows asigne la letra de la unidad, y luego vuelva a enumerar la lista? Un conjunto de pitones podría decirle qué cambió, ¿no? Lo siguiente funcionó para mí:

# 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." 
Cuestiones relacionadas