Python subprocess ausgabe zeilenweise auslesen

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
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo zusammen,

ich möchte das Kommando chkconfig in einem Pythonscript ausführen und dort die Ausgabe Zeilenweise auswerten. Die Ausgabe ist auf dem Bildschirm ist zeilenweise. Jedoch kann ich diesen String nicht zeilenweise auswerten.

Code: Alles auswählen

#!/usr/bin/python
import subprocess
import re
def check_daemons():
    cmd = ['chkconfig']
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    out, err = p.communicate()

    print repr(out)
    print type(out)
    for line in out:
         print line

check_daemons()

Wenn ich allerdings den String zeilenweise ausgeben möchte, dann wird jeder Buchstabe zeilenweise ausgeben und nicht die Zeile.

Es wird folgendes ausgegeben:

Code: Alles auswählen

0
:
o
f
f
	
1
:
o
f
f
	
2
:
o
f
f

statt:

Code: Alles auswählen

:
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off
acpid          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
VG niesel
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

hat sich erledigt.

Kaum in das Forum eingetragen, hat man die richtigen Stichwörter bei Google eingetragen udn die Lösung gefunden:


for line in out.split(os.linesep):
print line
BlackJack

@nieselfriem: Oder auch einfach die `splitlines()`-Methode auf Zeichenketten.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Oder gleich stdout lesen:

Code: Alles auswählen

p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in p.stdout:
    print line
Antworten