SFTP传输过程中如何监控进度

662
2025/4/10 3:32:35
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在SFTP传输过程中监控进度可以通过以下几种方法实现:

  1. 使用回调函数

    通过创建一个回调函数,可以在每次传输数据块时被调用,从而更新和显示文件的传输进度。以下是一个使用Paramiko库的示例代码:

    import os
    import paramiko
    
    def progress_callback(transferred, total):
        # 计算百分比并打印
        percentage = (transferred / total) * 100
        print(f"已传输: {transferred} bytes, 总大小: {total} bytes, 进度: {percentage:.2f}%")
    
    # 创建SSH客户端对象
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 连接到远程服务器
    ssh.connect('hostname', username='username', password='password')
    
    # 创建SFTP客户端对象
    sftp = ssh.open_sftp()
    
    # 设置回调函数
    sftp.put('local_file_path', 'remote_file_path', callback=progress_callback)
    
    # 关闭连接
    sftp.close()
    ssh.close()
    

    在这个示例中,progress_callback函数会在每次传输数据块时被调用,并接收两个参数:transferred(已传输的字节数)和total(文件的总字节数)。然后,它计算传输的百分比并打印出来。

  2. 使用监控工具

    可以使用一些专门的SFTP监控工具来实时监控文件传输进度。例如,sftpgo是一个功能齐全、高度可配置的SFTP服务器,它提供了Web界面来监控和管理SFTP连接和传输进度。

  3. 使用Python脚本

    可以编写Python脚本来监控SFTP目录变化并自动下载新文件。以下是一个简单的示例:

    import os
    import time
    import paramiko
    
    # SFTP服务器信息
    hostname = 'your_sftp_server.com'
    port = 22
    username = 'your_username'
    password = 'your_password'
    remote_directory = '/path/to/remote/directory'
    local_directory = '/path/to/local/directory'
    
    # 创建SFTP连接
    transport = paramiko.Transport((hostname, port))
    transport.connect(username=username, password=password)
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 获取远程目录的文件列表
    def get_remote_files():
        remote_files = sftp.listdir(remote_directory)
        return set(remote_files)
    
    # 下载文件
    def download_file(remote_file):
        remote_path = os.path.join(remote_directory, remote_file)
        local_path = os.path.join(local_directory, remote_file)
        sftp.get(remote_path, local_path)
        print(f"Downloaded {remote_file}")
    
    # 监控SFTP目录变化并下载新文件
    def monitor_sftp():
        known_files = get_remote_files()
        while True:
            current_files = get_remote_files()
            new_files = current_files - known_files
            for file in new_files:
                download_file(file)
            known_files = current_files
            time.sleep(60)  # 每分钟检查一次
    
    if __name__ == '__main__':
        monitor_sftp()
    

    运行此脚本后,它将监控指定的SFTP目录,并在检测到新文件时自动下载到本地目录。

通过这些方法,您可以在SFTP传输过程中有效地监控文件传输的进度。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: Linux ptrace能跟踪线程吗