简体   繁体   中英

& was unexpected when unzipping bz2 file

Hello I am trying to write a script to unzip bz2 files with 7zip and python.

First when I write

PS> & 'C:\Program Files\7-zip\7z.exe' e D:\path\example.bz2

with powershell it is working perfectly.

So I tried that with 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)

And I've got that error message: & was unexpected. Does someone has an idea why?

I am using Python 3.9.2

By using shell=True , you're opting to pass the command line to the platform-native shell, which on Windows is cmd.exe , not PowerShell , so your PowerShell command line fundamentally cannot be expected to work as-is.

If we take a step back: you don't need to involve the shell at all in your 7z.exe call , and not doing so also speeds up your operation.

By omitting shell=True , the target executable and its arguments must then be passed as the elements of an array rather than as a single command-line string.

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

Note the use of exitCode = , which captures 7z.exe 's exit code and therefore allows you to check for failure.

Alternatively, you could let Python raise an exception on failure automatically , by using subprocess.check_call() rather than subprocess.call()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM