转载自https://www.cnblogs.com/zhangchen5/p/16064335.html

1. 找不到文件报错

Traceback (most recent call last):
File "D:\PythonPoject\linuxtool\config\1.py", line 16, in <module>
sftp.put('01-network-manager-all.yaml', '/home/yibai/02-network-manager-all.yaml', print("上传完成!"))
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 757, in put
file_size = os.stat(localpath).st_size
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '01-network-manager-all.yaml'

这个报错是因为windos的路径不同

报不到文件,如果是window环境的话 需要用 "\\" 来转义,翻了很多帖子说window下 sftp 上传文件只支持绝对路径 , 最后我实验出来是支持 相对路径 的。

OSError: Failure

raise IOError(text)

OSError: Failure 报错是因为我没有写目标路径的文件名字光想着放在路径下面就行了

sftp.put(r'config\01-network-manager-all.yaml', '/home/yibai/', print("上传完成!"))

下面报错

Traceback (most recent call last):
File "D:\PythonPoject\linuxtool\config\1.py", line 16, in <module>
上传完成!
sftp.put(r'config\01-network-manager-all.yaml', '/home/yibai/', print("上传完成!"))
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 759, in put
return self.putfo(fl, remotepath, file_size, callback, confirm)
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 714, in putfo
with self.file(remotepath, "wb") as fr:
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 372, in open
t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 822, in _request
return self._read_response(num)
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 874, in _read_response
self._convert_status(msg)
File "D:\PythonPoject\lib\site-packages\paramiko\sftp_client.py", line 907, in _convert_status
raise IOError(text)
OSError: Failure 进程已结束,退出代码为 1

又去看了一遍官方文档才发现自己没看到

put(localpath, remotepath, callback=None, confirm=True)
将一个本地文件(localpath)复制到SFTP服务器上,作为remotepath。任何由操作引起的异常都会被传递过去。这个方法主要是作为一种方便提供的。 参数。
localpath (str) - 要复制的本地文件
remotepath (str) - SFTP服务器上的目标路径。注意,应该包括文件名。只指定一个目录可能会导致错误。
callback (callable) - 可选的回调函数(形式:func(int, int)),接受到目前为止所传输的字节和要传输的总字节数
confirm (bool) - 事后是否对文件做stat()以确认文件的大小
返回。
一个SFTPAttributes对象,包含关于给定文件的属性

发现其实官方文档已经写出来了 remotepath(str) 必须包括文件名 不要只写 路径 这个文件名你可以随意取可以起到重命名的效果。

put(localpath, remotepath, callback=None, confirm=True)

sftp.put('config\\01.yaml', '/home/yibai/01.yaml', print("上传完成!"))
sftp.put('config\\01.yaml', '/home/yibai/02.yaml', print("上传完成!"))

其实也可以用 r'' 这样就不用转义了

sftp.put(r'config\01.yaml', '/home/yibai/01.yaml', print("上传完成!"))

实例:

import paramiko

transport = paramiko.Transport(("192.168.253.128",22))
transport.connect(username = "root", password = "12345678")
sftp = paramiko.SFTPClient.from_transport(transport)
# 从远程服务器下载文件
# 远程服务器文件路径为/data/paramiko.txt
# sftp.get('/home/yibai/2.txt', '2.txt', print("下载完成!"))
# 从本地上传文件到远程服务器
sftp.put('config\\01.yaml', '/home/yibai/02.yaml', print("上传完成!"))
# 可以对其重命名 ,如果存在文件就覆盖
sftp.put(r'config\01-.yaml', '/home/yibai/02-network.yaml', print("上传完成!"))

也可以使用 os.path.join() 函数对其拼接

sftp.put(os.path.join('D:\\', '22222.txt'), os.path.join('/home/yibai/Desktop', '22222.txt'), print("上传完成!"))
# localpath 代表取D:\\22222.txt remotepath 会变成 Desktop/22222.txt
# 所以remotepath目标路径可以不用 os.path.join()

paramiko 文件传输失败 Sftp put 方法 踩坑点的更多相关文章

  1. SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录

    Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...

  2. 虚拟机出现“操作文件.PhysicalDrive1失败”的解决方法

    今天打算利用U盘给虚拟机装系统做实验,中途遇到了"操作文件.PhysicalDrive1失败"的错误,试了网上的方法都没有成功,最后自己试了很久总算弄出来了.鉴于本人的基础水平有限 ...

  3. Linux中常用文件传输命令及使用方法

    sftp sftp即Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中 ...

  4. 远程文件传输工具sftp、scp、rsync

    一.scp 格式 scp [options] [user@]host : /sourcefile /destpathscp [options] /sourcefile [user@]host:/des ...

  5. SSH-Secure-Shell 3.2.9 build283版本,创建直接打开文件传输的快捷方式的方法

    2019-12-31 16:21:23 版本信息: 在安装目录下新建快捷方式 目标填写:"D:\SSH-Secure-Shell\SshClient.exe" /f 图标选择,系统 ...

  6. C#调用java方法踩坑记

    首先,我的java代码写了一个遗传算法,这是我硕士毕业论文的核心算法,项目是基于C#的web项目.但是现在又不想用C#重写遗传算法代码,于是就想用C#去调用java的代码.在网上找了方法,一般有两种: ...

  7. $_GET方法踩坑

    背景 写代码时,遇到一个奇怪的问题:小程序卡券解码接口老是报解码失败,苦寻了一个小时,发现原来是url参数经过thinkphp的I方法被过滤掉,而且涉及到PHP原生的$_GET 原因 I方法底层是原生 ...

  8. Linux 上的常用文件传输方式介绍与比较

    ftp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间 ...

  9. Linux上常用的文件传输方式以及比较

    tp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间传 ...

  10. 转: Linux 上的常用文件传输方式介绍与比较

    from:  https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/ ftp ftp 命令使用文件传输协议(File Transf ...

随机推荐

  1. windows注册表的读

    1.打开 2.读取 //打开注册表 CString CDownDlg::GetPortCom(int nmber)//读取操作表,其类型为REG_SZ { CString ans; CString r ...

  2. [Unity]自定义地图编辑器(Scene视图下,EditorWindow的简单应用)

    最近的游戏又很多关卡需要配置(XML保存),给策划写了个非常简单的编辑器,记录下+废话下 1:Editor下打开新窗口需要继承EditorWindow,然后使用获取窗口即可,注意放在Editor文件夹 ...

  3. 使用a标签锚点实现顺滑效果

    scroll-behavior:smooth;//使用该方法使用a标签锚点的时候会实现平滑 xxx.scrollIntoView({ behavior: "smooth" })

  4. nginx 配置443 域名

    1 申请域名 (公有云)2 下载证书 pem key 并上传服务器指定目录3 公有云上做A记录解析 (解析到代理的nginx)4 nginx配置443模块 配置内容: server { listen ...

  5. containerd 卸载

    一.创建脚本 cat > remove.sh <<EOF #!/bin/bash # 删除contained命令及配置 rm -rf /usr/local/bin/ rm -rf / ...

  6. AC和瘦AP组网

    ac和瘦ap组网 参考了这篇文章[Cisco Packet Tracer]WLC配置瘦AP指南_时间进行的小宇的博客-CSDN博客_思科瘦ap配置命令 服务器server-pt配置 先设置IP地址,随 ...

  7. PHP_工厂模式

    实例化类,先需要引入类文件,但是有时候我们并不知道可能要用到那些类,如果将所有类文件全部引入,会造成资源浪费,这时候可以采用工厂模式,专门用于 自动加载.实例化 类. 实例代码: 注:案例中假设有一个 ...

  8. QT--QMainWindow窗口的状态栏设置

    QMainWindow窗口状态栏 实时显示时间: 1.获取实时时间使用定时器QTimer, QTimer *timer = new QTimer(); connect(timer, &QTim ...

  9. 利用pandas+pyecharts制作可视化图表

    # 导入pandas包 import pandas as pd # 从pyecharts下的charts 导入Bar和Timeline功能 from pyecharts.charts import B ...

  10. spark闭包检查

    spark在执行算子时,如果算子内部用到了外部(Driver)端的对象或变量,就一定会出现闭包:spark在执行算子之前会进行闭包检查,也就是对外部对象或变量进行序列化检查: