Ami*_*are 2 python sftp pysftp
我正在使用 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)
Run Code Online (Sandbox Code Playgroud)
有时它没有错误,但有时它会正确放置文件,但会引发以下异常。该文件由服务器上运行的另一个程序读取和处理,因此我可以看到该文件在那里并且没有损坏
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)
Run Code Online (Sandbox Code Playgroud)
我怎样才能防止异常?
根据所描述的行为,我假设该文件在由某个服务器端进程上传后很快就会被删除。
默认情况下pysftp.Connection.put,通过检查目标文件的大小来验证上传。如果服务器端进程设法过快地删除文件,则读取文件大小将失败。
您可以通过将confirm参数设置为False以下来禁用上传后检查:
self.sftp.put(localpath=self.filepath+filename, remotepath=filename, confirm=False)
Run Code Online (Sandbox Code Playgroud)
我相信无论如何检查都是多余的,请参阅
如何在 SFTP 文件传输期间执行校验和以确保数据完整性?
有关 Paramiko(pysftp 在内部使用)的类似问题,请参阅:
Paramiko put method throws "[Errno 2] File not found" if SFTP server has trigger to automatic move file on upload