解压缩 bz2 文件时出乎意料



你好,我正在尝试编写一个脚本,用7zip和python解压缩bz2文件。

第一次写

PS> & 'C:Program Files7-zip7z.exe' e D:pathexample.bz2

有了powershell,它可以完美地工作。

所以我在Python:上尝试了一下

import glob
import subprocess
target = r"D:path*.bz2"
tab = glob.glob(target)
for i in range(len(tab)):
subprocess.call("& 'C:\Program Files\7-zip\7z.exe' e %s" %tab[i], shell=True)

我得到了错误信息:&出乎意料。有人知道为什么吗?

我使用的是Python 3.9.2

通过使用shell=True,您选择将命令行传递给平台本机shell,在Windows上它是cmd.exe,而不是PowerShell,因此您的PowerShell命令行根本不能按原样工作。

如果我们后退一步:您根本不需要在7z.exe调用中涉及shell,不这样做也会加快您的操作。

通过省略shell=True,目标可执行文件及其参数必须作为数组的元素传递,而不是作为单个命令行字符串传递。

for i in range(len(tab)):
exitCode = subprocess.call([ 'C:\Program Files\7-zip\7z.exe', 'e', tab[i] ])

请注意exitCode =的使用,它捕获7z.exe的退出代码,因此允许您检查故障。

或者,您可以使用subprocess.check_call()而不是subprocess.call(),让Python在失败时自动引发异常

最新更新