转载自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. 周练7(ssti)

    {7*7} ->49 -> smarty {{7*'7'}} -> 49 -> twig {{7*'7'}} -> 7777777 -> jinjia2 1. [B ...

  2. vue3 loading 等待效果

    一.自定义组件 loading.vue <template> <div class="loading" v-show="msg.show"&g ...

  3. Pycharm 2022.2激活码到2023年7月,亲测有效

    33MEHOB8W0-eyJsaWNlbnNlSWQiOiIzM01FSE9COFcwIiwibGljZW5zZWVOYW1lIjoiUG9saXRla25payBNZXJsaW1hdSBNZWxha ...

  4. Web服务器1-socket编程

    任务详情 基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现: time服务器的客户端服务器,提交程序运行截图 echo服务器的客户端服务器,提交程序运行截图,服务 ...

  5. redisTemplate实现分布式锁(释放锁用lua脚本)

    package com.xxx.platform.util; import org.springframework.beans.factory.annotation.Autowired; import ...

  6. 堆QAQ

    L2-012 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are si ...

  7. Visual Studio 2013图标变白

    今天一打开电脑,就发现我的Visual Studio 2013的图标变成白色的了,我点开程序发现程序照常可以运行. 于是我就百度,有的说看注册表,发现缺少文件,结果我也没缺,还有什么更换主题的,都不管 ...

  8. 遍历operation

    std::ostringstream out; double f8Value; NXOpen::CAM::CAMSetup *camSetup = displayPart->CAMSetup() ...

  9. redis-creating server tcp listening socket 127.0.0.1:6379: bind No error

    安装redis,出现如下错误: 解决方法: 步骤1:命令行下输入:redis-cli.exe(注意不是redis-server.exe) 然后输入:shutdown exit 退出后输入.\redis ...

  10. flutter 图片加载缓存以及圆角的实现

    使用最多的图片缓存组建库cached_network_image 地址:cached_network_image 配置: dependencies: cached_network_image: ^2. ...