I am trying to grab stdout
from a subprocess.Popen
call and although I am achieving this easily by doing:
cmd = subprocess.Popen('ls -l', shell=True, stdout=PIPE)
for line in cmd.stdout.readlines():
print line
I would like to grab stdout
in "real time". With the above method, PIPE is waiting to grab all the stdout
and then it returns.
So for logging purposes, this doesn't meet my requirements (e.g. "see" what is going on while it happens).
Is there a way to get line by line, stdout
while is running? Or is this a limitation of subprocess
(having to wait until the PIPE
closes).
EDIT
If I switch readlines()
for readline()
I only get the last line of the stdout
(not ideal):
In [75]: cmd = Popen('ls -l', shell=True, stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....:
t
o
t
a
l
1
0
4
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…