在python中使用sftp从远程计算机复制文件

在python中使用sftp从远程计算机复制文件,python,sftp,paramiko,Python,Sftp,Paramiko,我希望能够在python中使用scp、ssh或sftp从远程机器复制文件。我发现最好的方法是将ssh与sftp结合使用。我一直在尝试用这个例子来完成我需要做的事情 import paramiko import os paramiko.util.log_to_file('logfile.log') host = "101.102.103.104" port = 22 transport = paramiko.Transport((host, port)) password = "pass" u

我希望能够在python中使用scp、ssh或sftp从远程机器复制文件。我发现最好的方法是将ssh与sftp结合使用。我一直在尝试用这个例子来完成我需要做的事情

import paramiko
import os

paramiko.util.log_to_file('logfile.log')

host = "101.102.103.104"
port = 22
transport = paramiko.Transport((host, port))
password = "pass"
username = "user"

sftp = paramiko.SFTPClient.from_transport(transport)

filepath = '~/remote/file'
localpath = '~/local/file'
sftp.get(filepath, localpath)

sftp.close()
transport.close()
执行此操作时,我收到以下错误:

Traceback (most recent call last):
  File "example.py", line 19, in <module>
    sftp.get(filepath, localpath)
AttributeError: 'NoneType' object has no attribute 'get'
回溯(最近一次呼叫最后一次):
文件“example.py”,第19行,在
get(文件路径,本地路径)
AttributeError:“非类型”对象没有属性“get”
我有什么遗漏或做得不对吗


谢谢

您的用户名和密码已初始化,但从未使用过。您需要为传输对象调用connect

指定必须向
paramiko.Transport()
提供一个元组时必须提供一个“类似套接字的对象”。我想这就是问题所在

更新:
尽管文档中另有规定,但元组是可以的

此调用sftp=paramiko.SFTPClient.from_transport(transport)返回无。很明显,你的
sftp
对象并没有被创建。文档中说了这一点,但是(特别是第281行和之后)显示
Transport
确实接受一个元组。是的,我也刚刚发现了这一点。正如我所说的,我只是“猜测”,现在还没有帕拉米科可供测试。你完全正确,我完全错过了。谢谢你指出这一点。但是现在当我运行它时,我得到一个IOError,说文件在sftp.get(filepath,localpath)中不存在,但它们确实存在。在调用sftp.get()之前,请确保localpath中的所有目录都存在。我明白了,这是因为我必须提供完整路径,而不是使用“~/”
password = "pass"
username = "user"
transport.connect(username = username, password = password)