猿问

从子进程实时捕获标准输出

我想subprocess.Popen()在Windows中使用rsync.exe,并在Python中打印标准输出。


我的代码可以运行,但是直到文件传输完成后才能捕获进度!我想实时打印每个文件的进度。


因为我听说现在应该使用Python 3.1,所以它在处理IO方面应该更好。


import subprocess, time, os, sys


cmd = "rsync.exe -vaz -P source/ dest/"

p, line = True, 'start'



p = subprocess.Popen(cmd,

                     shell=True,

                     bufsize=64,

                     stdin=subprocess.PIPE,

                     stderr=subprocess.PIPE,

                     stdout=subprocess.PIPE)


for line in p.stdout:

    print(">>> " + str(line.rstrip()))

    p.stdout.flush()


ibeautiful
浏览 573回答 3
3回答

一只斗牛犬

我知道这是一个老话题,但是现在有一个解决方案。使用--outbuf = L选项调用rsync。例:cmd=['rsync', '-arzv','--backup','--outbuf=L','source/','dest']p = subprocess.Popen(cmd,                     stdout=subprocess.PIPE)for line in iter(p.stdout.readline, b''):    print '>>> {}'.format(line.rstrip())
随时随地看视频慕课网APP

相关分类

Python
我要回答