Skip to content Skip to sidebar Skip to footer

Printing Stdout In Realtime From Subprocess

I want to print rather than catch the output from a bash command (more closer to real-time than this post). For instance, I have a script like this: from subprocess import Popen, P

Solution 1:

Try doing this way:

from subprocess import Popen, PIPE, STDOUT
cmd = 'rsync --rsh=ssh -rv thisdir/ servername:folder/'
p = Popen(cmd.split(), stdout=PIPE, stderr=STDOUT)
for line in p.stdout:
    print line

Note, that p.stdout has hardcoded buffer (8192 bytes), if you want to start reading file at once, try this:

for line in iter(p.stdout.readline,''):
    print line

Solution 2:

importsubprocesscmd='rsync --rsh=ssh -rv thisdir/ servername:folder/'
subprocess.call(cmd, shell=True)

(The shell=True paramater interprets the string by passing it to sh, allowing sh to split the string into tokens.)

Post a Comment for "Printing Stdout In Realtime From Subprocess"