seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11260
Wohnort: München
|
noisefloor schrieb: Python Programme werden nicht kompiliert...
Genau genommen wird bei CPython der Quelltext als bytecode kompiliert und dieser wird dann interpretiert. 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...
Wenn man udisks2 nutzt ist es eigentlich recht einfach: http://blog.madbob.org/daemons-blasfemy-and-automounting/ - https://linuxmeerkat.wordpress.com/2014/11/12/python-detection-of-usb-storage-device/ sollte man lesen, um die Hintergründe zu verstehen (die DBus API-Beschreibung von udisks2 hatte ich ja bereits verlinkt). Das Python-Modul dbus steckt in den Paketen python-dbus bzw. python3-dbus. Und statt lsusb könnte man auch pyusb (Paket python-usb) nutzen - z.B. um an die IDs von Hersteller und Produkt zu kommen:
| from __future__ import print_function
import usb.core
for device in usb.core.find(find_all=True):
print("{:04x}:{:04x}".format(d.idVendor, d.idProduct))
|
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend Forum Ich hab folgenden kurzen Python3 Code der funktioniert:
1
2
3
4
5
6
7
8
9
10
11
12
13 | import subprocess
# Byte-Werte aus Terminal-in Variable-Packen
output = subprocess.check_output("lsusb")
# Byte-Werte umwandeln in String-Werte
output = output.decode('utf8')
# String-Werte in Variable packen
usbid = output
# USB-Abfrageinhalt drucken
print (usbid)
# USB-Seriennummern-Vergleich
usbid = usbid.find('054c:019e')
# Suchergebnis drucken
print (usbid)
|
Zur Verdeutlichung lass ich mir das im Terminal ausgeben:
| Bus 001 Device 005: ID 1111:1111 Realtek Semiconductor Corp. Mass Storage Device (Multicard Reader)
Bus 001 Device 004: ID 054c:019e Sony Corp. Micro Vault 1.0G Mass Storage
Bus 001 Device 001: ID 2222:2222 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 3333:3333 Chicony Electronics Co., Ltd HP Multimedia Keyboard
Bus 002 Device 002: ID 4444:4444 Primax Electronics, Ltd HP Optical Mouse
Bus 002 Device 001: ID 5555:5555 Linux Foundation 1.1 root hub
123
|
Die obere Tabelle ist die USB-Abfrage. Die "123" das positive Ergebnis der Suche nach einem bestimmten USB-Stick, dessen ID mir bekannt ist.
In einem späteren Schritt möchte ich Daten von meinem Python3 Programm auf einen bestimmten (ID) USB-Stick schreiben und lesen können.
Dazu werde ich wohl so etwas wie einen Pfad benötigen. Nun kann aber der bestimmte (ID) USB-Stick natürlich in unterschiedliche USB-Buchsen gesteckt werden. Jetzt frage ich mich, ob Bus-Nummer und Device-Nummer einer aktuellen Abfrage, wie oben aufgeführt, genügend Information darstellen, um in einem späteren Schritt
auf diesen USB-Stick lesend und schreiben zugreifen zu können. Gruß HP-Fan
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo,
Dazu werde ich wohl so etwas wie einen Pfad benötigen
Du benötigst den Pfad, unter dem der USB-Stick eingehängt ist, richtig. Unter Ubuntu 16.04 (andere *buntus müsstest du testen) sollte der Pfad /media/DEIN_BENUTZERNAME/054A:019E sein. Achtung: in der ID sind die Buchstaben klein, im Pfad groß! Heißt, du brauchst lsusb noch nicht mal. Und nochmal Achtung: ob das auf dem Raspi auch so ist, musst du testen. Wenn du Raspbian einsetzt, könnte der Mount-Punkt auch anders sein, wenn Debian / Raspbian das anders handhabt. Kann ich dir nicht sagen, weil ich auf meinen Raspis keine USB-Sticks nutzt. Gruß, noisefloor
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Nachtrag: einfacher (und sicherer) wäre IMHO, wenn du eine udev-Regel erstellst, die veranlasst, dass dem Stick immer der gleiche Einhängepunkt zugewiesen wird. Grußl noisefloor
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend noisefloor Hmmm... wenn man mit meinem Progämmchen oben automatisch detektieren kann, ob der USB-Stick mit der ID anwesend ist, gibt es dann auch eine Methode
um zu sehen, wo der USB-Stick mit der entsprechenden ID-Nummer gemountet ist? Oder lass mich die Frage anders formulieren: Bekommt man mit der ID des USB-Sticks dessen Pfad heraus, wenn er eingesteckt ist?
Und nochmal Achtung: ob das auf dem Raspi auch so ist, musst du testen. Wenn du Raspbian einsetzt, könnte der Mount-Punkt auch anders sein, wenn Debian / Raspbian das anders handhabt.
Wie gesagt, entwickelt wird auf 16.04. Späterer Zieleinsatz soll ein Raspberry PI3 sein. Ab Werk ist übrigens OS-Noob dabei, was Raspbian inkludieren soll (Habe das System aber noch nicht).
Deshalb bringt es mir wenig, wenn ich den Pfad händisch fest "tackere". Wenn sich allerdings nichts Automatisches finden sollte, muss es wohl so sein. Freundlichen Gruß zurück HP-Fan
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Nachtrag Ich habe gerade etwas von einer Mount-Liste gelesen.
Es ist wohl so, das man sich die Liste der gemouteten Geräte ausgeben lassen muss, und dann in einem zweiten Schritt
in dieser Liste dann die ID suchen muss. So oder so ähnlich. ich lese mal weiter... Gruß HP-Fan
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17621
Wohnort: Berlin
|
HP-Fan schrieb: Nachtrag Ich habe gerade etwas von einer Mount-Liste gelesen.
Es ist wohl so, das man sich die Liste der gemouteten Geräte ausgeben lassen muss, und dann in einem zweiten
Eine solche Liste ist /etc/mtab, denn eine Tabelle ist eine Liste von Datensätzen.
Du kannst auch /etc/mtab auslesen. Das ist die Tabelle gemounteter Dateisysteme. Auf einem Stick können auch mehrere sein.
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo Forum Mal eine Frage zum Terminal. Ich teste gerne Befehle im Terminal, bevor ich sie in Python3 verwende.
Wenn ich...
oder...
... im Terminal ausführe, wird der Inhalt zwar angezeigt, aber die Terminalausgabe endet mit einem hell hinterlegtem... less /etc/fstab (END) Mit Enter kommt dann ein hinterlegtes END Dann kann man nichts mehr machen bzw. ein "exit" in Terminal schreiben.
Wenn ich die "ESC"-Taste drücke, wird ein nicht hinterlegtes "ESC" angezeigt. Aber auch hier komme ich nicht mehr aus dem Terminal. Wenn ich die Shift-Taste gedrückthalte
und ein "E" Tippe wird Examine angezeigt. Unterschiedliche Buchstaben ergeben unterschiedliche Meldungen, aber ich komme nicht mehr heraus.
Ich muss das Terminal mit dem "X" in der linken oberen Ecke "zwangsschliessen" - mit der Meldung es liefe noch ein Prozess im Terminal. Ein Schließen würde das Terminal beenden. Ist das normal, das man bei diesen zwei Befehlen für das Terminal nicht mehr heraus kommt? Gruß HP-Fan
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
[Off_Topic] HP-Fan schrieb: Mal eine Frage zum Terminal. Ich teste gerne Befehle im Terminal, bevor ich sie in Python3 verwende.
Wenn ich...
... im Terminal ausführe, wird der Inhalt zwar angezeigt, aber die Terminalausgabe endet mit einem hell hinterlegtem... less /etc/fstab (END) ...
Das ist völlig normal: schließlich hat less seine eigene Syntax (die Du z.B. bei den man -pages auch benutzt), und da machen einige übliche Tastendrücke überhaupt keinen Eindruck. Mit einem "q" kannst Du die show allerdings ganz einfach beenden. [/Off_Topic] LG, track
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo track Eventuell "q" wie quit??? Oh man wie peinlich 😳 Auch dir 1000 Dank track → Ab sofort nur noch track the crack! 👍 Gruß HP-Fan
|