Python &;解压bz2文件时发生意外
您好,我正在尝试编写一个脚本,用7zip和python解压bz2文件 首先当我写作的时候Python &;解压bz2文件时发生意外,python,powershell,Python,Powershell,您好,我正在尝试编写一个脚本,用7zip和python解压bz2文件 首先当我写作的时候 PS> & 'C:\Program Files\7-zip\7z.exe' e D:\path\example.bz2 有了powershell,它可以完美地工作 所以我用Python尝试过: import glob import subprocess target = r"D:\path\*.bz2" tab = glob.glob(target) for i in
PS> & 'C:\Program Files\7-zip\7z.exe' e D:\path\example.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的退出代码,因此允许您检查失败
或者,您可以让Python在出现故障时自动引发异常,方法是使用而不是&
是PowerShellYes的调用运算符。但是,如果我正确地安装了,调用函数会复制powershell中引号中的内容,因此我有义务纠正它。&特定于powershell。由于您是在Python中运行此命令,因此不需要&命令。你应该可以省略它。听起来您希望能够访问Powershell命令,但在Python中并非如此。