首页 > 解决方案 > 子进程 gunzip 抛出解压失败

问题描述

我正在尝试使用子进程进行压缩,但它返回错误 -

('解压失败 %s', 'gzip: /tmp/tmp9OtVdr 是一个目录 -- 忽略\n')

怎么了?

import subprocess
transform_script_process = subprocess.Popen(
                            ['gunzip', f_temp.name, '-kf', temp_dir],
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)(transform_script_stdoutdata, transform_script_stderrdata
                     ) = transform_script_process.communicate()
self.log.info("Transform script stdout %s",
                                  transform_script_stdoutdata)
if transform_script_process.returncode > 0:
shutil.rmtree(temp_dir)
raise AirflowException("Decompression failed %s",
                                               transform_script_stderrdata)

标签: python

解决方案


您正在调用该gunzip进程并将以下参数传递给它:

  • f_temp.name
  • -kf
  • temp_dir

我假设f_temp.name是您尝试解压缩的 gzip 文件的路径。-kf将强制解压并指示gzip在解压后保留文件。

现在是有趣的部分。temp_dir似乎是一个变量,它将保存您要将文件提取到的目标目录。但是,gunzip 不支持这一点。请查看 gzip 的手册。它指出您必须传入要解压缩的文件列表。没有指定目标目录的选项。

有关指定要提取到的文件夹的更多信息,请查看 Superuser 上的这篇文章:https ://superuser.com/questions/139419/how-do-i-gunzip-to-a-different-destination-directory


推荐阅读