如何通过pysftp监视文件传输的进度

2024-05-09 12:37:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.3.2和pysftp创建一个备份实用程序,它将文件的副本存储在网络上的另一台计算机上。在

我已经知道如何使用pysftp传输这些文件,但是我希望看到传输的进度(每秒字节数、完成百分比、剩余时间),而不是一些静态打印语句,表明传输已经开始或完成

可能是这样的(文件名:3.4MiB/s | 40%<;#

编辑: 如果我只知道如何获取pysftp的put命令来获取信息,那么我可能可以构建一个进度条,这就是我想知道的方法

编辑: 我想我在深入挖掘之后找到了另一个问题的答案:

How to see (log) file transfer progress using paramiko?


Tags: 文件lt网络实用程序编辑文件名计算机静态
3条回答

您可以编写自己的progressbar,如果您对终端有任何了解的话,这是相当简单的。或者您可以使用^{}。以下是文档中的一个简单示例:

@example
def example1():
    widgets = ['Test: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
               ' ', ETA(), ' ', FileTransferSpeed()]
    pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
    for i in range(1000000):
        # do something
        pbar.update(10*i+1)
    pbar.finish()

在这两种情况下,您都需要文件传输方法在传输过程中产生结果。如果你能让它产生它接收到的字节,那么创建一个进度条是非常容易的。在

您可以创建一个函数,每隔10%打印一次传输:

progressDict={}
progressEveryPercent=10

for i in range(0,101):
    if i%progressEveryPercent==0:
        progressDict[str(i)]=""

def printProgressDecimal(x,y):
    if int(100*(int(x)/int(y))) % progressEveryPercent ==0 and progressDict[str(int(100*(int(x)/int(y))))]=="":
        print("{}% ({} Transfered(B)/ {} Total File Size(B))".format(str("%.2f" %(100*(int(x)/int(y)))),x,y))
        progressDict[str(int(100*(int(x)/int(y))))]="1"

然后可以在get或put命令中调用该函数,如下所示:

^{pr2}$

示例输出为:

0.00% (32768 Transfered(B)/ 1108907068 Total File Size(B))
10.00% (110919680 Transfered(B)/ 1108907068 Total File Size(B))
20.00% (221806592 Transfered(B)/ 1108907068 Total File Size(B))
30.00% (332693504 Transfered(B)/ 1108907068 Total File Size(B))
40.00% (443580416 Transfered(B)/ 1108907068 Total File Size(B))
50.00% (554467328 Transfered(B)/ 1108907068 Total File Size(B))
60.00% (665354240 Transfered(B)/ 1108907068 Total File Size(B))
70.00% (776241152 Transfered(B)/ 1108907068 Total File Size(B))
80.00% (887128064 Transfered(B)/ 1108907068 Total File Size(B))
90.00% (998047744 Transfered(B)/ 1108907068 Total File Size(B))
100.00% (1108907068 Transfered(B)/ 1108907068 Total File Size(B))

在两个get/put方法中都存在一个回调函数(请参见 官方documentation

get(remotepath, localpath=None, callback=None, preserve_mtime=False)

回调可以是:

^{pr2}$

相关问题 更多 >