paramiko通过sftp上传文件夹

Raj*_*mon 2 python ssh sftp paramiko

在我的工作代码中,我有这个

import paramiko
parent=os.path.split(dir_local)[1]
for walker in os.walk(parent):
    try:
        self.sftp.mkdir(os.path.join(dir_remote,walker))
    except:
        pass
for file in walker[2]:
    sftp.put(os.path.join(walker[0],file),os.path.join(dir_remote,walker[0],file))
Run Code Online (Sandbox Code Playgroud)

现在显示的错误是

Trying ssh-agent key 5e08bb83615bcc303ca84abe561ef0a6 ... success
Caught exception: <type 'exceptions.IOError'>: [Errno 2] Directory does not exist.
Run Code Online (Sandbox Code Playgroud)

打印walker显示该文件夹中的所有文件,但我不知道为什么该文件夹不会复制到sftp服务器

mon*_*kut 5

除非你重写os.walk()它,否则会产生三个对象的元组:dirpath, dirnames, filenames

因此,您的os.path.join(dir_remote, walker)调用将始终抛出异常,从而导致您的预期目录未被创建.

我发现写这样的os.walk()循环更清楚:

for dirpath, dirnames, filenames in os.walk(parent):
    remote_path = os.path.join(dir_remote, dirpath)
    # make remote directory ...
    for filename in filenames:
        local_path = os.path.join(dirpath, filename)
        remote_fliepath = os.paht.join(remote_path, filename)
        # put file
Run Code Online (Sandbox Code Playgroud)

请记住,os.walk()遍历您指定的任何目录parent.