python-从子进程实时打印标准输出

我想打印而不是捕获bash命令的输出(比this post更接近实时).例如,我有一个这样的脚本:from subprocess import Popen, PIPE, STDOUTcmd = rsync --rsh=ssh -rv thisdir/ servername:folder/p = Popen(cmd.split(...

我想打印而不是捕获bash命令的输出(比this post更接近实时).例如,我有一个这样的脚本:

from subprocess import Popen, PIPE, STDOUT
cmd = 'rsync --rsh=ssh -rv thisdir/ servername:folder/'
p = Popen(cmd.split() ,stdout=PIPE, stderr=STDOUT)
output = p.communicate()[0]
print output

我希望从rsync实时打印文件传输的详细信息,就像从命令行进行rsync一样,而不是等待进程完成以打印输出.

解决方法:

尝试这样做:

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

请注意,p.stdout具有硬编码缓冲区(8192 bytes),如果要立即开始读取文件,请尝试以下操作:

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

本文标题为:python-从子进程实时打印标准输出

基础教程推荐