Skip to main content
 首页 » 编程设计

python之paramiko SFTP 挂起

2025年05月04日8lvdongjie

我正在尝试使用 paramiko 通过 SFTP 获取文件。 它可以连接,我可以列出目录,它甚至可以下载文件的第一个兆字节左右,但随后它就会挂起。没有异常(exception),没有错误,什么都没有。它只是无限期地卡在那里。

这是我正在使用的代码:

import paramiko 
t = paramiko.Transport( host ) 
t.connect( username=uname, password=passwd ) 
f = paramiko.SFTPClient.from_transport( t ) 
print f.listdir() 
f.get( fname, fname ) #it hangs on this line :\ 

我有问题主机的 sftp 访问权限,但没有 shell 访问权限。 主机包含一个我需要定期获取并在 python 脚本中处理的文件。

非常感谢任何解决此问题的帮助或在 Python 中执行 SFTP 的替代解决方案:)

请您参考如下方法:

我遇到了与 Ulfur 相同的问题。他发布了自己的修复/解决方法作为对另一个答案的评论,因此我决定将其添加为正确的答案以使其更加可见。

基本思想是不使用.get() 方法,而是循环遍历行。以下是 Python 3 实现。

transport = None 
sftp = None 
 
sftp_path = 'some/sftp/path' 
dst_path = '/some/local/path' 
 
try: 
    transport = paramiko.Transport((SFTP_HOST, SFTP_PORT)) 
    transport.set_log_channel('delapi') 
    transport.connect(username=SFTP_USER, password=SFTP_PASS) 
    sftp = paramiko.SFTPClient.from_transport(transport) 
 
    with sftp.open(sftp_path, 'r') as remote: 
        with open(dst_path, 'w') as local: 
            for line in remote: 
                local.write(line) 
 
except SSHException: 
    print("SSH error") 
finally: 
    if sftp: 
        sftp.close() 
    if transport: 
        transport.close()