Subprocess.call() 和gunzip 错误

Subprocess.call() 和gunzip 错误

我正在尝试使用 Python 的包子进程来压缩和 gzip 文件。我正在使用以下命令:

subprocess.call(['gunzip', a_path+myfile_gz], shell=True)

然后我收到错误消息:

gzip:不从终端读取的压缩数据。使用-f强制解压。

所以我输入:

subprocess.call(['gunzip', '-f', a_path+myfile_gz], shell=True)

我收到完全相同的错误消息。如果我输入shell=False,情况会更糟。

这真的很奇怪,因为如果我从终端执行此操作,它就可以正常工作!有人知道出了什么问题吗?

答案1

问题是你正在通过shell=True,所以你正在执行

sh -c gunzip /path/to/file.gz

(假设a_path+myfile_gz"/path/to/file.gz")。换句话说,因为shell参数是True,所以命令列表的第一个元素是 shell 片段;其他参数是该 shell 片段的参数(这里只是$0)。这在文档

如果你省略了shell=True,你会得到工作,但不是好的代码。不要将路径作为字符串进行操作;使用中的函数os.path。也许a_path+myfile_gz应该是os.path.join(a_path, myfile_gz)这样。

无论如何,Python 都内置支持压缩包。不要使用外部命令。

相关内容