使用pysftp模块或者paramiko模块时出现IOError: [Errno 13] Permission denied: 或IOError: [Errno 2]
2017-10-17 11:50
696 查看
最近,要使用python编写程序实现从本地上传文件到FTP服务器,从服务器下载文件到本地这样一个流程。首先,在网上查了需要使用的python模块,
看到使用pysftp和paramiko模块中的put和get方法都能实现。于是,就尝试了一下,可是莫名了出现了许多问题,有IOError: [Errno 13] Permission denied:类型的,
有IOError: [Errno 2] No such file, put() sftp_client类型的,有的出现IOError: [Errno 22] invalid mode ('rb') or filename异常的,还有其他类型的错误。总之,
纠结了三天左右,最终才解决这些问题,而解决的方式可能会让人大呼受不了。下面就在这过程中遇到的问题,解决的方式总结如下:
1.IOError: [Errno 2] No such file, put() sftp_client问题及解决的方式
srv = pysftp.Connection(~)
srv.put(localPath,remotePath)
上面的方式没有上传成功,但是改成下面的方式竟然成功了。
srv = pysftp.Connection(~)
srv.chdir(remotePath)
srv.put(localPath)
具体的代码如下:
原来出现异常的代码:
sftp.put('C:/Users/Administrator/Desktop/test.doc','/root/myTest/testdata/')
修改后,能够将本地路径'C:/Users/Administrator/Desktop/test.doc'下的test.doc文件成功上传到服务器'/root/myTest/testdata/'路径下:
2.IOError: [Errno 22] invalid mode ('wb') or filename或者IOError: [Errno 13] Permission denied:问题
出现这种问题,查阅资料有的说是路径的格式问题,需要在路径前加r或者将本地路径中的'\'换成'/',因为POSIX-like file system use '/'。
sftp.get('/root/myTest/data1/', 'C:/Users/Administrator/Desktop/python.pdf', callback=None, preserve_mtime=False)#这里将本地文件路径中的'\'换成'/'该问题解决了,但又出现新的问题"IOError: Failure"
最后,折腾了几天重新翻阅API文档,发现里面上传下载的方法如下:
get(remotepath, localpath=None, callback=None, preserve_mtime=False)
注意:这里的remotepath和localpath为:“文件所在目录 + '/' + 文件名”这样形式的完整的文件路径,而不是只有文件的目录,要不然会出上面所列类型的各种错误。
put(localpath, remotepath=None, callback=None, confirm=True, preserve_mtime=False)
注意:这里的remotepath和localpath为:“文件所在目录 + '/' + 文件名” 完整的文件路径,不是只有文件的目录,要不然会出各种错误。
将上面不管是使用pysftp还是paramiko模块中的put还是get方法,将上面的目录改成所要上传下载文件的完整路径(注意:这里的路径包括文件名,要不然程序不知道要将文件存储在哪里,所以会出现各种错误),上面出现的各种问题就不见了。
折腾了这么长时间,竟然是因为把文件路径写成目录了,以至于出现各种异常,也耽误了这么长时间,这是让人受不了。可能是前几天写hdfs文件上传下载的时候,里面的upload和download方法中的目录的路径和这里get和put方法里的文件的完整路径混淆所致吧。总结一下,以后遇到问题,超过几个小时查阅各种方法还是解决不了的情况下,还是直接看官方API文档来的直接而实际,要不然折腾时间还让人心累啊,这也算是一点收获吧。
看到使用pysftp和paramiko模块中的put和get方法都能实现。于是,就尝试了一下,可是莫名了出现了许多问题,有IOError: [Errno 13] Permission denied:类型的,
有IOError: [Errno 2] No such file, put() sftp_client类型的,有的出现IOError: [Errno 22] invalid mode ('rb') or filename异常的,还有其他类型的错误。总之,
纠结了三天左右,最终才解决这些问题,而解决的方式可能会让人大呼受不了。下面就在这过程中遇到的问题,解决的方式总结如下:
1.IOError: [Errno 2] No such file, put() sftp_client问题及解决的方式
srv = pysftp.Connection(~)
srv.put(localPath,remotePath)
上面的方式没有上传成功,但是改成下面的方式竟然成功了。
srv = pysftp.Connection(~)
srv.chdir(remotePath)
srv.put(localPath)
具体的代码如下:
原来出现异常的代码:
sftp.put('C:/Users/Administrator/Desktop/test.doc','/root/myTest/testdata/')
修改后,能够将本地路径'C:/Users/Administrator/Desktop/test.doc'下的test.doc文件成功上传到服务器'/root/myTest/testdata/'路径下:
with pysftp.Connection('10.2.19.12', username='root', password='yunjikeji', cnopts=cnopts) as sftp: sftp.chdir('/root/myTest/data1') sftp.put('C:/Users/Administrator/Desktop/test.doc')
2.IOError: [Errno 22] invalid mode ('wb') or filename或者IOError: [Errno 13] Permission denied:问题
出现这种问题,查阅资料有的说是路径的格式问题,需要在路径前加r或者将本地路径中的'\'换成'/',因为POSIX-like file system use '/'。
sftp.get('/root/myTest/data1/', 'C:/Users/Administrator/Desktop/python.pdf', callback=None, preserve_mtime=False)#这里将本地文件路径中的'\'换成'/'该问题解决了,但又出现新的问题"IOError: Failure"
最后,折腾了几天重新翻阅API文档,发现里面上传下载的方法如下:
get(remotepath, localpath=None, callback=None, preserve_mtime=False)
注意:这里的remotepath和localpath为:“文件所在目录 + '/' + 文件名”这样形式的完整的文件路径,而不是只有文件的目录,要不然会出上面所列类型的各种错误。
put(localpath, remotepath=None, callback=None, confirm=True, preserve_mtime=False)
注意:这里的remotepath和localpath为:“文件所在目录 + '/' + 文件名” 完整的文件路径,不是只有文件的目录,要不然会出各种错误。
将上面不管是使用pysftp还是paramiko模块中的put还是get方法,将上面的目录改成所要上传下载文件的完整路径(注意:这里的路径包括文件名,要不然程序不知道要将文件存储在哪里,所以会出现各种错误),上面出现的各种问题就不见了。
折腾了这么长时间,竟然是因为把文件路径写成目录了,以至于出现各种异常,也耽误了这么长时间,这是让人受不了。可能是前几天写hdfs文件上传下载的时候,里面的upload和download方法中的目录的路径和这里get和put方法里的文件的完整路径混淆所致吧。总结一下,以后遇到问题,超过几个小时查阅各种方法还是解决不了的情况下,还是直接看官方API文档来的直接而实际,要不然折腾时间还让人心累啊,这也算是一点收获吧。
相关文章推荐
- 使用 yum 出现 [Errno 4] IOError: [Errno ftp error] 的解决办法
- 安装python包时出现IOError: [Errno 13] Permission denied
- python使用urllib.urlretrieve时出现“IOError:[Errno 2] No such file or directory”解决办法
- 使用rosmake编译ROS功能包时出错:“IOError: [Errno 13] Permission denied: '/home/xxx/.ros/rosdep/sources.cache/”
- windows python flask上传文件出现IOError: [Errno 13] Permission denied: 'E:\\git\\test\\static\\uploads'的解决方法
- magento -- 使用magento connect 安装模块时出现ERROR: failed to mkdir ......
- python freeline.py 报错 IOError: [Errno 13] Permission denied
- 使用虚拟机安装Linux出现错误[Errno 5] Input/Output error
- 在apache环境中使用 python stock 请求遇到error: [Errno 13] Permission denied
- 安装第三方包的时候报错 IOError: [Errno 13] Permission denied: 'C:\\Program Files\\Python2.7\\Lib\\site-packages
- Android5.0以上使用XUtils访问网络出现错误或者网络数据无法加载: java.io.IOException: stack size 1036KB
- IOError: [Errno 13] Permission denied
- asp.net使用uploadify上传出现的IO Error问题
- Jenkins使用jenkins-cli.jar进行远程调用时出现“ERROR: No such job 'test'”或者权限不够等问题解决(Windows)
- 使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can't create table (errno: 121)
- Python打开文件出现IOError: [Errno 22] invalid mode ('rb') or filename
- 在使用Fragstats4.1软件,添加ESRI Grid图层时出现错误:Error: Grid IO dll is not loaded。
- python open() 打开文件出现 IOError: [Errno 22] invalid mode ('r') or filename:
- 使用pip install 时出现[Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:ce,,