【问题标题】:Upload file via sftp with python使用 python 通过 sftp 上传文件
【发布时间】:2016-02-18 12:34:23
【问题描述】:

我写了一个简单的代码来用python将文件上传到sftp服务器。我正在使用 python 2.7

import pysftp

srv = pysftp.Connection(host="www.destination.com", username="root",
password="password",log="./temp/pysftp.log")

srv.cd('public') #chdir to public
srv.put('C:\Users\XXX\Dropbox\test.txt') #upload file to nodejs/

# Closes the connection
srv.close()

文件没有出现在服务器上。但是,没有出现错误消息。代码有什么问题?

编辑:我已启用日志记录。我发现该文件已上传到根文件夹而不是公共文件夹下。好像srv.cd('public') 没用。

【问题讨论】:

  • 从您的描述中很难判断。在创建连接时设置log='/tmp/pysftp.log' 并调查日志文件。

标签: python python-2.7 sftp pysftp


【解决方案1】:

我找到了自己问题的答案。

import pysftp

srv = pysftp.Connection(host="www.destination.com", username="root",
password="password",log="./temp/pysftp.log")

with srv.cd('public'): #chdir to public
    srv.put('C:\Users\XXX\Dropbox\test.txt') #upload file to nodejs/

# Closes the connection
srv.close()

srv.putsrv.cd放在里面

【讨论】:

  • ImportError: No module named pysftp - 我正在使用 CentOS。如何在不使现有 python2.7 崩溃的情况下获得 pysftp?
  • @YumYumYum 表示需要下载模块
  • @YumYumYum pip install pysftp
【解决方案2】:
import pysftp

with pysftp.Connection(host="www.destination.com", username="root",
password="password",log="./temp/pysftp.log") as sftp:

  sftp.cwd('/root/public')  # The full path
  sftp.put('C:\Users\XXX\Dropbox\test.txt')  # Upload the file

不需要sftp.close(),因为在with-block结束时连接会自动关闭

我对@9​​87654323@ 做了一个小改动,改为cwd

语法-

# sftp.put('/my/local/filename')  # upload file to public/ on remote
# sftp.get('remote_file')         # get a remote file

【讨论】:

    【解决方案3】:

    作为上下文管理器将关闭连接。不需要显式使用 srv.close()

    【讨论】: