Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &;解压bz2文件时发生意外_Python_Powershell - Fatal编程技术网

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

您好,我正在尝试编写一个脚本,用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 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中并非如此。