Python通过paramiko的SFTP put上传大批量数据时出现的bug及解决方案

news/2024/11/23 1:44:17/

文章目录

  • 前言
  • 一、报错情况
  • 二、解决方案
    • 1.路径问题
    • 2.权限不对
    • 3.写法问题
    • 4.paramiko版本问题
    • 5.sftp.put()参数问题
  • 总结


前言

在通过paramiko中的sftp上传大批量数据时,遇到了很奇怪的情况:写好的程序在正常运行3天后,接下来的几天每天上传几百张就回出错(上传之后,服务器上会有另一个程序将文件转移掉),找了很久,目前是暂时恢复正常了。正文如下:


一、报错情况

连接成功后通过put上传数据时,出现错误:IOError: [Errno 2] No such file。但是这个报错不是已开始就出现的,而是上传了几条数据之后,然后才开始报出来,所以并不是表面看到的“文件不存在”那么简单。

二、解决方案

查了挺久,看到的就是如下几点,该说不说,基本都大差不差,但对我的情况来说,并没卵用,真正解决方法的是最后一个方案。大家可以根据自己的情况选择解决方案。

1.路径问题

这个结果是我看到的最多的,就是说确定你本地文件路径和远程路径都是存在的,然后将相对路径改为绝对路径。大家可以通过如下命令验证文件路径是否存在

os.path.exists(filepath) #filepath即为你要验证的文件路径

为True表示路径存在,反之,则路径不存在。但我的情况中,确信路径没问题,所以,该方案于我无用,pass。

2.权限不对

首先,确定下自己代码中写的用户名是否有在远程文件中读写文件的权限。如果没有的话,改下权限去试试,可以参考如下命令进行暴力更改权限:

chmod -R 777 xxx

xxx即为远程文件夹路径,-R可加可不加,加上的话这个远程文件夹下的子文件夹下的权限也会变。
然而,既然我是成功上传了几张之后才报的错,那说明我的权限没问题,所以,方法不适合,pass.

3.写法问题

根据这个博客中说的,将写法改了,即在put之前,先加个chdir,如下:

sftp.chdir(remote_dir)
sftp.put(filepath)

remote_dir为远程文件夹路径,filepath表示的是本地文件路径。
但是改了之后,我的报错依然,所以继续pass.

4.paramiko版本问题

其次,还尝试了更改paramiko的版本,升版、降版都试了,报错依然,pass。

5.sftp.put()参数问题

心烦意乱时,偶然间,翻到了这里,终于找到了答案。原来put时,默认会在事后对state()已确认文件的大小,所以把这个参数给改为False即可,如下:

sftp.put(localpath, remotepath, confirm=False)

localpath即为本地路径,remotepath即为远程文件路径,confirm便是上班提到的确认文件大小的参数。
改了之后,终于解决了自己的问题。


总结

以上,便是本篇的全部内容,如有问题,欢迎评论区交流。


http://www.ppmy.cn/news/123235.html

相关文章

充电桩测试设备TK4800充电机(桩)现校仪检定装置

TK4800是一套专用于检定电动汽车非车载充电机现场校验仪和电动汽车交流充电桩现场校验仪的装置,针对新能源汽车充电动态特性进行设计,支持稳态电能计量(针对恒定负载)和动态电能计量(针对波动性负载)两种模…

独立、相关、正交

文章目录 【1. 独立】【2. 相关】【3.正交】【4. 相互关系】相关和独立相关和正交独立和正交独立、不相关和正交小结 【5. 参考文献】 【1. 独立】 独立:对于两个随机变量 y 1 y_1 y1​ 和 y 2 y_2 y2​,若 y 1 y_1 y1​ 的有关信息不给出 y 2 y_2 …

信号调制的工作原理

要理解如何进行无线数据传输,我们需要了解: 什么是频率? 信息/数据信号 时间表示 频率表示,为什么它很重要? 滤波器如何工作? FCC通信频段 调制和解调 这些主题可能您在大学专业课上学过&#xff0c…

深入探讨JMeter中不为人知的JSONPath用法

在jmeter使用过程中,我们经常会看到接口返回数据类型为application/json,也就时我们常说的json格式。 而在功能测试时,我们经常会要对它的结果进行断言,确认结果是否与预期一致,有时候还会想从结果中提取某个值&#…

vue-cli3.0创建项目IE兼容处理

一、白屏处理 IE白屏,基本是JS代码报错,包括app.js报错或者chunk包报错,需要分以下几个步骤解决: 1. 安装sockjs-client包,npm i sockjs-client -D。 2. 安装babel-polyfill包,npm i babel-polyfill -D&…

一只电压力锅

一只电压力锅 九阳电压力锅,服役五年有余。 一天早晨,准备用它熬粥,指示灯不亮,按按钮不反应。 换根电源线试试,还是不行。 看来是挂了,外部零件正常,密封圈刚换过,这样让它退役…

git工作流实践

常见分支命名 远程仓库的分支:主干分支master, 开发分支dev,发布分支release 个人开发分支:特性分支feature, 缺陷修改分支bugfix, 热更新分支 hotfix 一般工作流如下 创建个人本地开发分支: git checkout -b feat…

不锈钢和铝合金电饭锅哪个好

不锈钢电饭锅和铝合金电饭锅各有优缺点,你可以根据自己的喜好选择。 不锈钢电饭锅优点是: 不锈钢材质耐用,可以长期使用。不锈钢易于清洁,操作简单。不锈钢电饭锅一般比较轻,易于携带。 不锈钢电饭锅缺点是&#xff1a…