subprocess mit einem | teiler

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
unique24
User
Beiträge: 69
Registriert: Donnerstag 5. Juli 2018, 14:51

Hallo,

ich möchte die WLAN Qualität gerne auslesen.
Shell command ist:
"iwconfig wlan0 | grep -i quality"

aber ich bekomme das nicht zum laufen mit.

Code: Alles auswählen

result = subprocess.run(['iwconfig', 'wlan0', '| grep', '-i', 'quality'], stdout=subprocess.PIPE)
            logger.info(result.stdout)
erhalte nur b' '

Wie kann ich den grep in den subprocess einbauen?


Danke!
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@unique24: Das geht so nicht weil das ``|`` ein Syntaxelement einer Shell ist. Ich sehe aber auch nicht warum man ``grep`` verwenden sollte denn nach einer Zeichenkette suchen kann man auch in Python machen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
unique24
User
Beiträge: 69
Registriert: Donnerstag 5. Juli 2018, 14:51

Ja, stimmt ... mit 2 subprocesses würde es klappen:

Code: Alles auswählen

cmd = "iwconfig wlan0".split()
result = subprocess.run(cmd, stdout=subprocess.PIPE)
cmd = "grep -i quality".split()
result = subprocess.run(cmd, input=result.stdout, stdout=subprocess.PIPE)
werd es aber wohl noch mit python direkt machen!
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Gar nicht, weil solch ein grep ganz einfach mit Pythonmitteln nachprogrammiert werden kann:

Code: Alles auswählen

process = subprocess.Popen(['iwconfig', 'wlan0'], stdout=subprocess.PIPE, encoding="utf8")
for line in process.stdout:
    if "quality" in line.lower():
        print(line.strip())
Ansonsten müßte man mehrere Subprozesse über PIPEs zusammenbauen; man braucht das Zwischenergebnis nicht als String.
unique24
User
Beiträge: 69
Registriert: Donnerstag 5. Juli 2018, 14:51

Danke, ja so klappt das auch ganz gut!
Antworten