Python paramiko文件传输显示上传下载进度条源码 您所在的位置:网站首页 paramiko下载文件 Python paramiko文件传输显示上传下载进度条源码

Python paramiko文件传输显示上传下载进度条源码

2023-07-10 06:53| 来源: 网络整理| 查看: 265

本文Python Code基于chatGPT的推荐,并修改调试实际运行通过,供学习参考。

通过使用python paramiko库,实现文件传输,包括上传和下载,并且同步显示上传和下载进度条信息,实时获取传输进度,避免print方式频繁刷屏困扰:Python paramiko文件传输显示上传下载进度信息 - print_Entropy-Go的博客-CSDN博客。

import sys import os import time import paramiko def download_file_with_progress(hostname, username, password, remote_path, local_path): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=hostname, username=username, password=password) sftp = ssh.open_sftp() # get remote file size remote_file_size = sftp.stat(remote_path).st_size print ("remote_file_size:{}".format(remote_file_size)) with open(local_path, 'wb') as f: # show download progress def progress_bar(transferred, remote_file_size, suffix=''): bar_len = 100 filled_len = int(round(bar_len * transferred / float(remote_file_size))) percents = round(100.0 * transferred / float(remote_file_size), 1) bar_filled = '\033[32;1m%s\033[0m' % '*' * filled_len bar = bar_filled + '-' * (bar_len - filled_len) sys.stdout.write('[%s] %s%s %s\r' % (bar, '\033[32;1m%s\033[0m' % percents, '%', suffix)) sys.stdout.flush() # transfer 32768 bytes as SSH slice, get remote file to local sftp.getfo(remote_path, f, callback=progress_bar) sys.stdout.write('\n') sftp.close() ssh.close() def upload_file_with_progress(hostname, username, password, remote_path, local_path): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=hostname, username=username, password=password) sftp = ssh.open_sftp() # get file size local_file_size = os.stat(local_path).st_size print ("local_file_size:{}".format(local_file_size)) with open(local_path, 'rb') as f: # show upload progress def progress_bar(transferred, local_file_size, suffix=''): bar_len = 100 filled_len = int(round(bar_len * transferred / float(local_file_size))) percents = round(100.0 * transferred / float(local_file_size), 1) bar_filled = '\033[32;1m%s\033[0m' % '*' * filled_len bar = bar_filled + '-' * (bar_len - filled_len) sys.stdout.write('[%s] %s%s %s\r' % (bar, '\033[32;1m%s\033[0m' % percents, '%', suffix)) sys.stdout.flush() # transfer 32768 bytes as SSH slice, put local file to remote sftp.putfo(f, remote_path, local_file_size, callback=progress_bar) sys.stdout.write('\n') sftp.close() ssh.close() if __name__ == "__main__": hostname = "host_IP" username = "host_username" password = "host_password" remote_path = "~/file" local_path = "./file.download" remote_path_upload = "~/file.upload" local_path_upload = "./file" # download file and calculate cost print ("Download Start, 32678 bytes as default SSH slice: ") download_start = time.time() download_file_with_progress(hostname, username, password, remote_path, local_path) download_end = time.time() download_cost = download_end - download_start print ("Download successfully! Cost {}s".format(download_cost)) cutline = '\033[32;1m%s\033[0m' % '=' * 100 print (cutline) # upload file and calculate cost print ("Upload Start, 32678 bytes as default SSH slice: ") upload_start = time.time() upload_file_with_progress(hostname, username, password, remote_path_upload, local_path_upload) upload_end = time.time() upload_cost = upload_end - upload_start print ("Upload successfully! Cost {}s".format(upload_cost))

传输完成输出:

$ python download_upload_big_file_progress_bar.py Download Start, 32678 bytes as default SSH slice: remote_file_size:63376366 [****************************************************************************************************] 100.0% Download successfully! Cost 2.7611076831817627s ==================================================================================================== Upload Start, 32678 bytes as default SSH slice: local_file_size:63376366 [****************************************************************************************************] 100.0% Upload successfully! Cost 2.147914171218872s

传输中截图:

 传输完成截图:

参考:

Python paramiko文件传输显示上传下载进度信息 - print_Entropy-Go的博客-CSDN博客

Python paramiko实现文件的简单传输上传和下载代码_Entropy-Go的博客-CSDN博客 

下一步计划对比不同的文件传输方式及优缺点:单进程,多进程,以及多线程的文件传输



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有