pysftp + py7zr 解压缩挂在存档上
pysftp + py7zr decompress is hanging on archive
一些背景信息:客户将 7-zip 存档放在远程 sftp 服务器上,我处理它们。
我的问题是,在某些 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 存档(大多数存档小于 1mb),此问题可能会发生 1 次。
我试图验证档案的完整性,它们是有效的。
在我的桌面上,py7zr 能够在没有 crashing/hanging.
的情况下提取所有档案文件
我在想可能是 sftp 连接导致了挂起。
谢谢
--- 编辑---
根据 MartinPrikryl 的反馈,我 运行 在我的本地计算机上完成了我的整个脚本,它没有挂起。
它仅与服务器 运行ning 脚本的特定存档挂起。
我注意到存档比另一个存档大得多 (~ 9mb)。
但是服务器有很多磁盘 space(1 TB 可用)、4gb 内存和 4 CPU,所以这应该不是问题。
我没能找到为什么 py7zr 挂在一些档案上但是 更新 python 3.7.4 到 python 3.8.5 解决了问题。
一些背景信息:客户将 7-zip 存档放在远程 sftp 服务器上,我处理它们。
我的问题是,在某些 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 存档(大多数存档小于 1mb),此问题可能会发生 1 次。 我试图验证档案的完整性,它们是有效的。 在我的桌面上,py7zr 能够在没有 crashing/hanging.
的情况下提取所有档案文件我在想可能是 sftp 连接导致了挂起。
谢谢
--- 编辑---
根据 MartinPrikryl 的反馈,我 运行 在我的本地计算机上完成了我的整个脚本,它没有挂起。 它仅与服务器 运行ning 脚本的特定存档挂起。 我注意到存档比另一个存档大得多 (~ 9mb)。 但是服务器有很多磁盘 space(1 TB 可用)、4gb 内存和 4 CPU,所以这应该不是问题。
我没能找到为什么 py7zr 挂在一些档案上但是 更新 python 3.7.4 到 python 3.8.5 解决了问题。