Seite 1 von 1

subprocess mit einem | teiler

Verfasst: Montag 30. November 2020, 20:22
von unique24
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!

Re: subprocess mit einem | teiler

Verfasst: Montag 30. November 2020, 20:32
von __blackjack__
@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.

Re: subprocess mit einem | teiler

Verfasst: Montag 30. November 2020, 20:35
von unique24
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!

Re: subprocess mit einem | teiler

Verfasst: Montag 30. November 2020, 20:35
von Sirius3
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.

Re: subprocess mit einem | teiler

Verfasst: Montag 30. November 2020, 21:22
von unique24
Danke, ja so klappt das auch ganz gut!