Search code examples
pythonperl7zip

Use subprocess python library to unzip a file using 7zip


I would like to unzip a file with Python using 7zip executable. In Perl this is pretty straightforward:

$zip_exe_path = "C:\\Dropbox\\7-zip\\7z.exe";
$logfile_path = "C:\\Temp\\zipped_file.7z";
system ("$zip_exe_path x $log_file_path -y");

I tried this:

import subprocess
zip_exe_path = "C:\\Dropbox\\7-zip\\7z.exe"
logfile_path = "C:\\Temp\\zipped_file.7z"
subprocess.call(['zip_exe_path','x','logfile_path','-y'])

When I do so I get this error:

FileNotFoundError: [WinError 2] The system cannot find the file specified

Thanks for any help!


Solution

  • The error is that you are passing the strings 'zip_exe_path' and 'logfile_path' instead of the values of those variables.

    import subprocess
    zip_exe_path = "C:\\Dropbox\\7-zip\\7z.exe"
    logfile_path = "C:\\Temp\\zipped_file.7z"
    subprocess.call([zip_exe_path, 'x', logfile_path, '-y'])
    

    You can of course pass the command as a single string with shell=True but the shell does not add any value and incurs some overhead (and risk!)