作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 pysftp 连接到服务器并向其上传文件。
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
self.sftp = pysftp.Connection(host=self.serverConnectionAuth['host'], port=self.serverConnectionAuth['port'],
username=self.serverConnectionAuth['username'], password=self.serverConnectionAuth['password'],
cnopts=cnopts)
self.sftp.put(localpath=self.filepath+filename, remotepath=filename)
有时它可以正常运行,没有错误,但有时它可以正确地放置文件,但会引发以下异常。该文件由服务器上运行的另一个程序读取和处理,因此我可以看到该文件在那里并且没有损坏
File "E:\Anaconda\envs\py35\lib\site-packages\pysftp\__init__.py", line 364, in put
confirm=confirm)
File "E:\Anaconda\envs\py35\lib\site-packages\paramiko\sftp_client.py", line 727, in put
return self.putfo(fl, remotepath, file_size, callback, confirm)
File "E:\Anaconda\envs\py35\lib\site-packages\paramiko\sftp_client.py", line 689, in putfo
s = self.stat(remotepath)
File "E:\Anaconda\envs\py35\lib\site-packages\paramiko\sftp_client.py", line 460, in stat
t, msg = self._request(CMD_STAT, path)
File "E:\Anaconda\envs\py35\lib\site-packages\paramiko\sftp_client.py", line 780, in _request
return self._read_response(num)
File "E:\Anaconda\envs\py35\lib\site-packages\paramiko\sftp_client.py", line 832, in _read_response
self._convert_status(msg)
File "E:\Anaconda\envs\py35\lib\site-packages\paramiko\sftp_client.py", line 861, in _convert_status
raise IOError(errno.ENOENT, text)
FileNotFoundError: [Errno 2] No such file
如何防止异常?
最佳答案
根据所描述的行为,我假设该文件在由某些服务器端进程上传后不久就被删除。
默认pysftp.Connection.put
通过检查目标文件的大小来验证上传。如果服务器端进程删除文件的速度太快,则读取文件大小将会失败。
您可以通过将confirm
参数设置为False
来禁用上传后检查:
self.sftp.put(localpath=self.filepath+filename, remotepath=filename, confirm=False)
我认为检查无论如何都是多余的,请参阅
How to perform checksums during a SFTP file transfer for data integrity?
有关 Paramiko(pysftp 内部使用)的类似问题,请参阅:
Paramiko put method throws "[Errno 2] File not found" if SFTP server has trigger to automatically move file upon upload
实际上,你应该直接使用 Paramiko,因为 pysftp 是一个死项目。请参阅pysftp vs. Paramiko 。
关于尽管文件已上传,Python pysftp.put 仍引发 "No such file"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49718668/
我是一名优秀的程序员,十分优秀!