[Python] Rilevare e rimuovere una periferica USB

Massimo Capanni massimo.capanni a gmail.com
Ven 29 Apr 2011 09:41:49 CEST


Salve a tutti,

sto cercando di realizzare un semplice script per effettuare la copia
automatica di alcuni file da memoria USB a un pc windows.

In pratica per ragioni di difficile accesso ad una postazione, l'operatore
inserisce una memoria USB in una delle porte del pc e automaticamente
vengono copiati dei file nel sistema (un Windows Xp).

In una prima ipotesi ho scritto qualcosa del genere, con l'ipotesi di avere
gia' mappato un disco USB in precedenza:

----------------------------------------------------------
from os import access, F_OK
from time import sleep
from shutil import copy

copiato = False
while 1:
    # se il disco mappato e' accessibile ...
    if access("W:", F_OK):
        # se e' gia' stato copiato non esegue nulla ...
        if copiato:
            None
        else:
            # copia il file e lo sovrascrive e imposta 'copiato' True
            copy("w:\\pippo.txt", "c:\\")
            copiato = True
    else:
        copiato = False
        sleep(30)
----------------------------------------------------------

lo script rimane sempre in esecuzione e se ha accesso al disco W: copia il
file fino a che la memoria non viene tolta e reinserita.

A questo punto, e' chiaro che lo script, molto semplice e spartano, non
effettua la rimozione del dispositivo una volta copiato il file, quindi
l'unica ipotesi e' togliere brutalmente la memoria rischiando di corrompere
i dati. Ho provato a cercare in rete per risolvere questo problema e le
soluzioni sembrano essere un paio: o effettuo la rimozione del dispositivo
richiamando un'applicazione particolare da sistema (tipo ejectusb) o
utilizzo delle chiamate di sistema, il che aumenterebbe notevolmente la
complessita' dello script.

Avete mai avuto a che fare con un problema simile?

max
-------------- parte successiva --------------
Un allegato HTML  stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20110429/37512864/attachment.html>


Maggiori informazioni sulla lista Python