python - 子进程 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)
解决方案
您正在调用该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
推荐阅读
- python - 如何使字典仅按最大值输出(implied_volatility)?
- javascript - TypeError [ERR_UNESCAPED_CHARACTERS] 路径包含日语
- python - 使用python将具有相似值的文本文件合并到一个文件中
- python - 如何为图中的每个点绘制不同的标准偏差?
- android - 如何在 Mastercard Gateway Android SDK 中进行 3-D 安全认证?
- qt - 构建opencv contrib cvv模块时出现LNK错误
- html - 具有固定位置的 Html div 布局
- c++ - 如何确保不会重新分配 std::vector?
- reactjs - React Native (Class Component) 当子组件的props改变时重新渲染父组件
- c++ - VS2019中的C++项目不输出exe