2013-08-14 9 views
6

Potrzebuję pętli nad wyjściem polecenia. Myślałem, że użyję subprocess.check_output, teraz mam dwa problemy.Python loop over subprocess.check_output według linii

Oto plik:

foo 
bar 

Oto mój skrypt Pythona:

import subprocess 

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

i oto co mam:

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

Spodziewam:

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

Odpowiedz

11

subprocess.check_output ([ 'kot', 'foo']) zwraca ciąg znaków: "foo \ nbar"

Zatem twój dla iteruje pętli nad ciąg, drukowanie każdy znak, jeden po drugim.

Poniższy powinno rozwiązać problem:

import subprocess 

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

Można również zrobić:

import subprocess 

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

można również użyć [ '.splitlines()'] (https://docs.python.org /library/stdtypes.html#str.splitlines) lub 'p =' ['subprocess.Popen'] (https://docs.python.org/library/subprocess.html#popen-constructor)' (..., stdout = subprocess.PIPE) dla linii w p.stdout: ... ' – bufh