Seite 1 von 1

subprocess

Verfasst: Mittwoch 8. Juli 2020, 10:49
von noni
guten tag ich habe hier die folgende Funktion:

def pruefe():
ps = subprocess.Popen(('ps', 'awxu'), stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', 'bash'), stdin=ps.stdout)
ps.wait()
print(output)
return output

ich möchte dann also in der nächsten funktion prüfen ob in der variable output, "bash" gefunden wurde. Ich habe es bereits versucht irgendwie in eine Liste zu packen. Es hat aber nicht funktioniert, da es ein string ist. Wenn ich in einer while oder for-schleife versuche die variable auszugeben, bekomme ich natürlich jeden Buchstaben einzeln.
Ich bin langsam wirklich ratlos, kann mir da vielleicht einer helfen?

Re: subprocess

Verfasst: Mittwoch 8. Juli 2020, 11:01
von sparrow
Du solltest dir psutils anschauen.

Re: subprocess

Verfasst: Mittwoch 8. Juli 2020, 11:09
von noisefloor
Hallo,

das ist zu kompliziert und unpythonisch gedacht. Wenn du alles mit der Shell machen willst -> schreib' ein Shellskript :-)

Mit Python kann man das so machen:

Code: Alles auswählen

[>>> ps = subprocess.check_output(('ps', 'awxu'))
>>> for line in ps.split():
...     if b'bash' in line:
...         print('found "bash"')
... 
found "bash"
>>> 
Oder mit dem erwähnten Modul psutil:

Code: Alles auswählen

>>> import psutil
>>> for proc in psutil.process_iter(['name']):
...     if proc.name()=='bash':
...         print('found "bash"')
... 
found "bash"
found "bash"
>>>
Gruß, noisefloor

Re: subprocess

Verfasst: Mittwoch 8. Juli 2020, 11:11
von Sirius3
Ein externes Programm ´grep` aufzurufen, nur um eine Liste an Zeilen nach einem Wort zu durchsuchen, ist ziemlich umständlich, da würde man einfach in Python die Zeilen durchgeben:

Code: Alles auswählen

ps = subprocess.Popen(('ps', 'awxu'), stdout=subprocess.PIPE)
for line in ps.stdout:
    if "bash" in line:
        print(line.strip())
ps.wait()
Aber selbst `ps` muß man nicht aufrufen, weil es mit dem Paket psutils genau die Funktionalität in Python schon gibt.