分享
  1. 首页
  2. 主题
  3. Python

Paramiko中上传远程文件方法步骤详解

maiziedu · · 5278 次点击 · 开始浏览 置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

本文和大家分享的主要是paramiko中上传文件的方法及步骤,希望通过本文的分享,对大家学习和使用paramiko有所帮助。 机器件文件传输 一般选择SCP或者SFTP SCP SCP全写是:Secure Copy,是基于SSH协议的文件拷贝方法,可以在本机与远程主机或两个远程主机之间进行文件拷贝。SCP的实现需要通过SCP协议以及SCP程序。 使用:scp localfile usr@host:dir SFTP 在计算机领域,SSH文件传输协议 (英语:SSH File Transfer Protocol,也称 Secret File Transfer Protocol,Secure FTP或SFTP) 是一数据流连线,提供档案存取、传输和管理功能的网络传输协定。由互联网工程任务组 (IETF) 设计,透过SSH 2.0 的扩充提供安全档案传输能力,但也能够被其它协定使用。 SFTP != FTP paramiko如何处理 以SFTP为实现 API:paramiko.SFTPClient Paramiko它是选择SFTP的然后它提供给我们的api的一个类呢它就是paramiko.SFTPClient这个类,然后这个类呢它提供了很多的这个函数来供我们来调用来处理SFTP它的各种各样的运用,然后我们来,看一下这个编码的实现。 其实我们现在就可以在这个ParamikoClient的这个里面,来进行进一步的操作首先在初始化函数里面sftp_client为none。 self.sftp_client = None 然后这个定义一个函数直接让外部获取。 def get_sftp_client(self): if not self.sftp_client: self.sftp_client = paramiko.SFTPClient.from_transport(self.client.get_transport()) return self.sftp_client 现在就来看一下 sftp_client = client.get_sftp_client() 取出来,然后调用它的put,put就是向远程机器来传送文件 sftp_client.put('/Users/allen/code/paramiko_study/res.txt', '/home/allen/config.ini) 运行 ![11.png](http://studygolang.qiniudn.com/161214/59e67d4560bd8ca5a39ee78f85e86d44.png) 这个时候如何来验证 验证的时候最简单的办法,就是在看在你的远程机器上已经有了这个新文件而且可以比较它的MD5看两者是不是一致的,MD5就是验证文件的一种方法。我们可以看一下它的callback,它这个callback是返回我们可以看一下 def get_callback(size1, size2): print size1, size2 sftp_client.put('/Users/allen/code/paramiko_study/res.txt', '/home/allen/res.txt', get_callback) ![22.png](http://studygolang.qiniudn.com/161214/8e7c4a08640d45c17e62608c73c2a966.png) 看它其实是就是传输的数据的大小,它被调用连词。这个回调函数就是说这个paramiko它内部当这个传输开始跟结束的时候它提供了,给我们一种处理自己逻辑的一种途径,比如说我们在开始或者是结束的一些特别的操作,我们就可以,来使用这个回调函数。设计一个api的时候你应该考虑这个用户,它的一个灵活处理,如果没有这个callback的话,使用者来调用的时候,这个put这个函数就完全对外是一个是一个黑盒,然后它就没办法做一些,个性化的处理所以说现在的话我们就非常方便。这里面就观察它的状态。然后就看到了传输的一个问价的一个大小。其实就是说这个指令它本身是非常简单的,但是我们需要关注的是我们在这 from paramiko_client import ParamikoClient client = ParamikoClient('config.ini') client.connect() sftp_client = client.get_sftp_client() def get_callback(size1, size2): print size1, size2 sftp_client.put('/Users/allen/code/paramiko_study/res.txt', '/home/allen/res.txt', get_callback) 取出这个get_sftp_client()这个函数它是有问题的,比如我们不调用它的这个函数,比调用它这个client.connect()函数,我们直接去运行它,它会有什么问题。 ![33.png](http://studygolang.qiniudn.com/161214/c6d26dce741419475ba2d733166d5bc8.png) 它就抛出了异常就是说这个sectons还没有打开,然后我们就去获取它的sftp这个transport就是说这个有一个风险,就是说前面的这个函数可能没有电用然后,它就或去这个sftp_client这个是有问题的,就是说我们这应该加一个判断,是什么。 def get_sftp_client(self): if self.client_state == 0: self.connect() if not self.sftp_client: self.sftp_client = paramiko.SFTPClient.from_transport(self.client.get_transport()) return self.sftp_client 其实我们这可以加一个很简单的一个 class ParamikoClient: def __init__(self, config_str): self.config = ConfigParser.ConfigParser() self.config.read('config.ini') self.client = paramiko.SSHClient() self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.sftp_client = None self.client_state = 0 等于0表示未连接,我们这个连接接一旦成功我们就把它 self.client.connect(hostname=self.config.get('ssh', 'host'), port=self.config.getint('ssh', 'port') , username=self.config.get('ssh', 'username'), password=self.config.get('ssh', 'password') , timeout=self.config.getfloat('ssh', 'timeout')) self.client_state = 1 ![44.png](http://studygolang.qiniudn.com/161214/5414cfb4a006422e96da2e1fd5f55793.png) 现在即便是外部它没有调用这个connect,然后我们在获取这个get_sftp_client()主动帮它检测到异常主动的connect函数把这个基础的sftp_client给建立起来。连接给建立起来这个时候,这个函数它就是实用性是比较高得。 原文链接:http://www.maiziedu.com/wiki/frame/upload/

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
5278 次点击
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)