[英]How to set up progress bar and also print output from subprocess.Popen
[英]How to print progress from this code as the subprocess is running?
上面的代码仅在代码完成执行时显示rsync进度。 我想打印进度。 例如,当文件正在传输时,我想一直显示进度。 我怎样才能做到这一点?
import re
import subprocess
def sort(rprogress):
'''This function extracts the percentage from the rsync progress and return strings of percentanges'''
progress1 = re.findall(r'\d+%', rprogress)
remove_duplicate = set(progress1) #Remove Duplicate percentage from list
remove_percent = [a.replace('%', '') for a in remove_duplicate] #Removes percentage
sorted_list = sorted(remove_percent, key=int) #Sort in ascending order
#result = ', '.join(map(lambda sorted_list: str(sorted_list) + '%', sorted_list)) #Adds the percentage
return sorted_list
source12 = 'sachet.adhikari@69.43.202.97:/home/sachet/my_files/ok.txt'
password = 'password'
destination = '/home/zurelsoft/files'
result = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stdout=subprocess.PIPE).communicate()[0]
print result
print sort(result)
stdout=subprocess.PIPE
阻止子进程打印到stdout,而是使用类似于bash中的communicate
将其传递给result
sshpass -[args] rsync [source] [dest]
将打印进度,但
sshpass -[args] rsync [source] [dest] | sort
在该过程完成之前,不会打印任何内容。
你需要的是对tee
的stdout
。 看这里 。 根据这些答案,您可以执行以下操作:
# Caution! untested code
result = []
process = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz',
'--info=progress2', source12, destination],
stdout=subprocess.PIPE)
while process.poll() is None:
line = process.stdout.readline()
print line
result.append(line)
print sort(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.