一个小背景:一个客户端在远程sftp服务器上放了一个7-zip的归档文件,然后我处理它们。
我的问题是,在一些7-zip文件上,我的程序挂起,解压缩功能永远不会结束,但所有的存档文件都在本地服务器上找到(存在)。
我设法在终端上通过ctrl+c获得堆栈跟踪:
[终端屏幕][1][1]: https://i.stack.imgur.com/O62U4.png
我的代码:def download_from_sftp(self):
with pysftp.Connection(host=self.hostname, port=self.port, username=self.user, password=self.password, cnopts=self.cnopts) as sftp:
self.logger.debug("Connection succesfully established ... ")
sftp.cwd(self.path) # Switch to a remote directory
directory_structure = sftp.listdir_attr()
self.logger.debug("Downloading zip files :")
for attr in directory_structure:
self.logger.debug(attr.filename + " " + str(attr))
sftp.get(attr.filename, self.path_retour + attr.filename)
with py7zr.SevenZipFile(self.path_retour + attr.filename, mode='r') as z:
z.extractall(self.path_retour)
os.rename(self.path_retour + attr.filename, self.path_archive_python + attr.filename) # move zip to archive folder on local server
sftp.remove(attr.filename) # delete zip on remote server
这个问题可能在1000个7zip档案中发生1次(大多数档案是<1 mb)。我试图核实档案的完整性,它们是有效的。在我的桌面上,py7zr可以在不崩溃/挂起的情况下提取所有存档文件。
我想可能是sftp连接导致了挂起。
感谢——编辑——
与MartinPrikryl反馈我确实运行我的整个脚本在我的本地计算机上,它不挂起。它只与运行脚本的服务器上的特定存档一起挂起。我注意到这个存档比另一个要大得多(~ 9mb)。然而,服务器有很多磁盘空间(1tb空闲),4gb ram和4个CPU,所以这应该不是问题。
我没有设法找到py7zr挂在一些档案上的原因,但更新python 3.7.4到python 3.8.5已解决