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?
subprocess
- 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:
Oder mit dem erwähnten Modul psutil:
Gruß, noisefloor
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"
>>>
Code: Alles auswählen
>>> import psutil
>>> for proc in psutil.process_iter(['name']):
... if proc.name()=='bash':
... print('found "bash"')
...
found "bash"
found "bash"
>>>
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:
Aber selbst `ps` muß man nicht aufrufen, weil es mit dem Paket psutils genau die Funktionalität in Python schon gibt.
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()