使用 python 通过 sftp 上传文件
Posted
技术标签:
【中文标题】使用 python 通过 sftp 上传文件【英文标题】:Upload file via sftp with python 【发布时间】: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'
并调查日志文件。
【参考方案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.put
和srv.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结束时连接会自动关闭
我对@987654323@ 做了一个小改动,改为cwd
语法-
# sftp.put('/my/local/filename') # upload file to public/ on remote
# sftp.get('remote_file') # get a remote file
【讨论】:
【参考方案3】:作为上下文管理器将关闭连接。不需要显式使用 srv.close()
【讨论】:
以上是关于使用 python 通过 sftp 上传文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 phpseclib 通过 SFTP 检查上传的文件是不是存在
使用 ppk 文件上传 Paramiko sftp [重复]