Comment puis-je écouter pour " périphérique usb à insérer des événements dans Linux, en Python?
Je voudrais écrire un script Python pour Amarok sous Linux pour copier automatiquement les stackoverflow podcast sur mon lecteur. Lorsque je branche le lecteur, il serait de monter le lecteur, copiez le dans l'attente de podcasts et d'éjecter le disque du lecteur. Comment puis-je écouter pour les "branchés" de l'événement? J'ai regardé à travers hald, mais ne pouvait pas trouver un bon exemple.
- Wow, pouvez-vous croire que nous avons utilisé pour écouter des podcasts sur des appareils qui n'ont pas une connexion internet haut-débit à l'internet?
Vous devez vous connecter pour publier un commentaire.
Mise à jour: Comme dit dans les commentaires, Hal n'est pas pris en charge dans les distributions récentes, la norme est maintenant udev, Voici un petit exemple qui rend l'utilisation de glib boucle et udev, je garde la couche d'abstraction matérielle version pour des raisons historiques.
C'est fondamentalement la exemple dans la documentation pyudev, adapté pour travailler avec les anciennes versions, et avec la glib boucle, notez que le filtre doit être personnalisé pour votre besoin:
Ancienne version avec Hal et d-bus:
Vous pouvez utiliser D-Bus de liaisons et d'écouter de la
DeviceAdded
etDeviceRemoved
signaux.Vous aurez à vérifier les capacités de l'appareil Ajouté afin de sélectionner les périphériques de stockage seulement.
Voici un petit exemple, vous pouvez supprimer les commentaires et de les essayer.
Vous devez vous connecter à Hal Manager en utilisant le Système de Bus.
Et vous avez besoin de connecter un écouteur pour les signaux qui vous intéresse sur, dans ce cas
DeviceAdded
.Je suis en utilisant un filtre basé sur les capacités. Il acceptera toute
volume
et fera appeldo_something
avec des si, vous pouvez lire la documentation Hal pour trouver le plus adapté requêtes pour répondre à vos besoins, ou pour plus d'informations sur les propriétés de la couche d'abstraction matérielle des périphériques.Exemple de fonction qui affiche quelques informations sur le volume:
Je n'ai pas essayé d'écrire un tel programme moi-même, cependant j'ai juste regardé les liens suivants (merci Google!), ce qui je pense sera utile:
En particulier, lisez à propos de la
org.freedesktop.Hal.Manager
de l'interface et de sesDeviceAdded
etDeviceRemoved
événements. 🙂Espérons que cette aide!
Voici une solution en 5 lignes.
Enregistrer ce pour un fichier de dire
usb_monitor.py
, exécutezpython monitor.py
. Branchez n'importe quel port usb et il va périphérique d'impression détailsTesté sur Python 3.5 avec
pyudev==0.21.0
.Je pense que D-Bus de travail de la Chris mentionné, mais si vous êtes à l'aide de KDE4, vous pouvez utiliser le cadre Solide d'une manière similaire à la KDE4 "Nouveau Périphérique Déclarant" applet.
La source C++ pour que l'applet est ici, qui montre comment utiliser Solide pour détecter de nouveaux appareils. Utilisation PyKDE4 pour les liaisons Python pour ces bibliothèques, comme le montre ici.