subprocess

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
noni
User
Beiträge: 4
Registriert: Freitag 3. Juli 2020, 13:51

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?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Du solltest dir psutils anschauen.
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Antworten