2013-08-14 5 views
6

Ich muss über die Ausgabe eines Befehls Schleife. Ich dachte, ich würde subprocess.check_output verwenden, jetzt habe ich zwei Probleme.Python Schleife über subprocess.check_output von Linie

Hier ist eine Datei:

foo 
bar 

Hier ist mein Python-Skript:

import subprocess 

for line in subprocess.check_output(['cat', 'foo']): 
    print "%r" % line 

Und hier ist, was ich bekommen:

$ python subp.py 
'f' 
'o' 
'o' 
'\n' 
'b' 
'a' 
'r' 
'\n' 

erwarte ich:

$ python subp.py 
'foo\n' 
'bar\n' 

Antwort

11

subprocess.check_output ([ 'Katze', 'foo']) gibt eine Zeichenfolge: "foo \ nbar"

So Ihre for-Schleife iteriert über die Schnur, jedes Zeichen gedruckt wird, one-by-one.

Die folgende Beschreibung ist Ihr Problem zu beheben:

import subprocess 

print subprocess.check_output(['cat', 'foo']) 

Sie können auch tun:

import subprocess 

for line in subprocess.check_output(['cat', 'foo']).split('\n'): 
    print "%r" % line 
+1

könnte auch [ '.splitlines()'] (https://docs.python.org /library/stdtypes.html#str.splitlines) oder 'p =' ['subprocess.Popen'] (https://docs.python.org/library/subprocess.html#popen-constructor)' (..., stdout = subprocess.PIPE); für Zeile in p.stdout: ... ' – bufh