HP-Fan
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend Leute, Gibt es eine Möglichkeit, die USB-Anschlüsse mit der Hilfe von Python zu überwachen,
und eine Programm-Reaktion aus zu lösen? Ich habe ein Script, dass grafisch anzeigen soll, ob ein USB-Stick eingesteckt ist, oder nicht.
Außerdem will ich verhindern, dass auf den USB-Stick geschrieben wird, wenn gar keiner eingesteckt ist. Anders herum sollen auch keine Daten eingelesen werden können, wenn der Stick ausgesteckt ist. → Mein Python Programm muss also irgendwie an die Info kommen, ob USB-Stick anwesend, oder nicht. Bei Windows lief früher so ein Watchdog-Programm - Ist das bei Linux/Ubuntu auch so?
Eventuell stellt ja Ubuntu eine Art Pipe "|" zur Verfügung, von der man die Info bekommen kann?
Mit dem "mount" Problem muss ich mich wahrscheinlich auch noch auseinander setzen - oder geht dieser Kelch an mir vorbei? 😬 Gruß HP-Fan
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hallo! In Python kenne ich mich leider nicht aus, aber ich denke du kannst dir mit udev helfen. Dort kann bspw. dein Python-Script beim Einstecken eines (bestimmten) USB-Sticks ausgeführt werden.
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo udev sieht gut aus. Werde mich einlesen - Danke und Gute Nacht. Gruß HP-Fan
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17604
Wohnort: Berlin
|
HP-Fan schrieb:
Außerdem will ich verhindern, dass auf den USB-Stick geschrieben wird, wenn gar keiner eingesteckt ist.
Das brauchst Du nicht verhindern, das geht von selbst nicht. ☺
Anders herum sollen auch keine Daten eingelesen werden können, wenn der Stick ausgesteckt ist.
Auch hier ist das sowieso schon nicht möglich. ☺
→ Mein Python Programm muss also irgendwie an die Info kommen, ob USB-Stick anwesend, oder nicht.
Ein bestimmter? Ein beliebiger? Was ist mit 3 Sticks bei 7 Anschlüssen?
Bei Windows lief früher so ein Watchdog-Programm - Ist das bei Linux/Ubuntu auch so?
Eventuell stellt ja Ubuntu eine Art Pipe "|" zur Verfügung, von der man die Info bekommen kann?
Mit dem "mount" Problem muss ich mich wahrscheinlich auch noch auseinander setzen - oder geht dieser Kelch an mir vorbei? 😬
Du kannst auch /etc/mtab auslesen. Das ist die Tabelle gemounteter Dateisysteme. Auf einem Stick können auch mehrere sein.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11248
Wohnort: München
|
Es gibt mit pyudev ein nettes libudev-Binding für Python: https://pyudev.readthedocs.io/en/latest/
Damit kannst du u.a. gefiltert nach Geräte-Attributen auf Events reagieren. Da das eigentliche Kriterium vermutlich eher der Mount des Dateisystems auf dem Stick ist (es sei denn du schreibst direkt auf das Block Device) und nicht allein die physische Anwesenheit des Sticks, könnte man sich auch überlegen sich über DBus an udisks2 zu hängen: http://storaged.org/doc/udisks2-api/2.7.0/ - oder man nimmt einen fertigen Wrapper: http://lazka.github.io/pgi-docs/index.html#UDisks-2.0
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Morgen Leute - man ist hier schon viel los ☺ Ich glaube ich muss noch ein paar Infos nachreichen:
Aktuell entwickle ich das Python-Program auf diesem System (siehe oben). Dieser Rechner hat hinten 4 und vorne 2 USB-Buchsen.
Ziel ist es, das fertige Programm am Ende zu so zu kompilieren, dass es auf dem Raspberry PI3 läuft. Der hat nämlich 4 USB-Anschlüsse.
Daraus folgt also, dass ich eine Methode wählen sollte, die auch nach dem Kompilieren des Pyton-Scriptes auf dem Raspi funktioniert.
Da ist ab Werk das OS-Noobs vorinstalliert und Raspian ist auch vorhanden. Unten im Anhang habe ich eine Maske des Python-Programmes, um das es gehen soll. Das Bild des USB-Sticks (auf dem Bild gerade Aktiv), soll je nach dem,
ob ein USB-Stick steckt aktualisiert werden. Das kann ich aber nur, wenn ein eine Statusinfo habe, was am USB-Steckplatz gerade los ist. Ein bestimmter? Ein beliebiger? Was ist mit 3 Sticks bei 7 Anschlüssen?
user_unkown's Einwand ist berechtigt und er hat damit den Nagel auf den Kopf getroffen. Prinzipiell wäre es mir egal, in welchem Port der USB-Stick eingesteckt wurde. Allerdings
interessieren USB-Keyboard und USB-Mäuse nicht. Die Meldung soll also nur bei vorhandenem Massenspeicher kommen. Und was passiert, wenn ein User 2 USB Sticks
gleichzeitig einsteckt? Gut, die zum Schluß gennante Problematik könnte ich umgehen, indem ich die verbleibenden USB-Buchsen mechanisch sperre ... ← Nicht schön aber selten! 😀 Gruß HP-Fan
- Bilder
|
curly
Anmeldungsdatum: 2. Mai 2010
Beiträge: 268
|
user_unknown schrieb: HP-Fan schrieb:
Außerdem will ich verhindern, dass auf den USB-Stick geschrieben wird, wenn gar keiner eingesteckt ist.
Das brauchst Du nicht verhindern, das geht von selbst nicht. ☺
Anders herum sollen auch keine Daten eingelesen werden können, wenn der Stick ausgesteckt ist.
Auch hier ist das sowieso schon nicht möglich. ☺
ymmd 🤣
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6494
|
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo Alles klar - Danke an alle Mitwirkenden. HP-Fan
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend Leute Ich muss nochmal ran an das USB Problem... Wenn ich in Python... | import os
os.system("lsusb")
|
...eingebe, dann bekomme ich im Terminal eine Ausgabe über alle USB-Geräte. Kann ich in Python diese Daten in einen String/Variable packen? Gruß HP-Fan
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6494
|
bin kein Programmier. Aber: Mit "=" ?
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend BillMaier Das ist ein Terminal-Befehl. Folglich ist die Ausgabe auch im Terminal. Und ich komme da leider nicht mit meinem Python dran... 😢 Naja, wer suchet, der findet... also suche ich mal weiter... Gruß HP-Fan
|
apt-ghetto
Anmeldungsdatum: 3. Juni 2014
Beiträge: 2943
|
API Als Rückgabewert gibt os.system den Exitstatus zurück. So etwas wie | import subprocess
output = subprocess.check_output("lsusb")
print(output)
|
sollte deinem Anliegen näher kommen. Aber da können dir richtige Python-Programmierer eher weiter helfen als ich.
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo @apt-ghetto
Damit habe ich das in einer Variable und kann mit Zeichenketten-Operatoren die für mich wichtigen Informationen ziehen - Super!!! 1000 - Dank 👍 HP-Fan
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo,
Ziel ist es, das fertige Programm am Ende zu so zu kompilieren
Python Programme werden nicht kompiliert... Die Anzahl der USB-Buchsen ist egal - Linux handhabt das anders als Windows, wo je nach USB-Buchse ggf ein anderer Laufwerksbuchstabe zugewiesen wird. Linux zwar auch durch, aber anders. Wenn es DER USB-Stick ist, also immer ein bestimmter, dann würde ich den auch per udev-Regel erkennen lassen und dann immer auf einen spezifischen Pfad mounten. Wenn es EIN USB-Stick ist, ist das schwieriger... Und vergiß' einfach, dass es os.system() gibt. Das ist veraltet - steht sogar in der offiziellen Python-Doku - und benutze statt dessen das subprocess Modul. Gruß, noisefloor
|