Konsole Rückgabewerte weiterverarbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo zusammen,

ich will die Bluetooth Umgebung abscannen.
nun spreche ich über Python die Linux Konsole an, was auch sehr gut funktioniert.
nun würde ich gerne die ausgelesenen Daten weiter verarbeiten.
kann mir jemand sagen wie ich Daten weiter verarbeiten kann?

danke im voraus

Code: Alles auswählen

def Bluetooth(): 
    os.system('hcitool scan')
Bluetooth()
das Ergebnis auf der Konsole sieht folgendermaßen aus:

Code: Alles auswählen

Scanning ...
	BC:8B:4B:BC:C7:C6	test
	05:06:E8:B2:40:A1	test1
Ende
Zuletzt geändert von Hyperion am Dienstag 5. Juni 2012, 06:17, insgesamt 1-mal geändert.
Grund: Datenausgabe in Code-Block gesetzt
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hallo erdmulch,

benutze statt "os.system" das "subprocess" Modul.

Grüße
Gerrit
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also als erstes solltest Du mal von `os.system` auf das `subprocess`-Modul migrieren. Dafür böte sich ber Dir `subprocess.check_output` an.

Funktionsnamen solltest Du auch nicht groß schreiben, sondern klein. Zudem sollten sie Funktionalität beschreiben; `bluetooth` vermittelt aber eher nicht diesen Eindruck ;-) Wieso nicht `scan_devices` oder so ähnlich?
erdmulch hat geschrieben: nun würde ich gerne die ausgelesenen Daten weiter verarbeiten.
kann mir jemand sagen wie ich Daten weiter verarbeiten kann?
Was genau willst Du da wissen? Also wie sollen die Daten denn aufbereitet werden? Und welche Regeln gelten für die Ausgabe?

Die bisherigen Infos sind da ein wenig dürftig. Laut Beispiel sind alle Zeilen Datenzeilen, bis auf die erste und die letzte. Die Datenzeilen kann man einfach mittels `str.split` am Leerzeichen trennen und hätte den Adressteil und den Namen getrennt.

Aber da musst Du uns schon mehr Infos geben.

Last but not least: Hast Du mal bei pypi gesucht, ob es nicht bereits fertige Wrapper-Libs zum Thema Bluetooth gibt?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

erdmulch hat geschrieben:nun würde ich gerne die ausgelesenen Daten weiter verarbeiten.
kann mir jemand sagen wie ich Daten weiter verarbeiten kann?
Wie schon von einigen anderen gesagt: Die Verwendung von subprocess ist der passende Weg.

Hier mal ein Beispiel:

Code: Alles auswählen

import subprocess

c = subprocess.Popen(["ipconfig", "/all"], stdout=subprocess.PIPE)
data, error = c.communicate()
print data
Die Ausgabe ist jetzt in data. Du musst nur noch die enthalte Information in die gewünschten Bestandteile zerlegen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@/me: Wenn der OP nicht aktiv "kommunizieren" will, so erscheint mir ja `check_output` als für den Anfänger einfacher zu überblicken ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:@/me: Wenn der OP nicht aktiv "kommunizieren" will, so erscheint mir ja `check_output` als für den Anfänger einfacher zu überblicken ;-)
Stimmt. Ich habe einfach mal bei mir rumfliegenden Beispielcode rausgekramt.

Der Popen-Konstruktor bietet allerdings Möglichkeiten, die man sich durchaus mal ansehen sollte.
BlackJack

Gibt's erst ab 2.7:

Code: Alles auswählen

In [192]: subprocess.check_output
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

AttributeError: 'module' object has no attribute 'check_output'
Wenn man LTS oder stable-Versionen als Ziel hat…
Antworten