tests/Python/dpt.py
2024-03-10 16:02:52 +01:00

101 lines
2.1 KiB
Python
Executable File

#!/bin/python3
import sys
import getopt
import os
from pathlib import Path
import subprocess
ARCHIVE_TYPES = [
".zip",
".rar",
".7z"
]
MAX_OUTPUT_LEN = 150
input_path = ""
do_delete = False
def usage(name):
print('''{script} [options]
-i <path> : specify input dir
-d : do delete
-h : print help and quit'''\
.format(script=name))
def opts(argv):
global input_path, do_delete
try:
opts, args = getopt.getopt(argv[1:], 'i:dh')
except getopt.GetoptError as e:
print("Unkown option. Quiting.")
exit(1)
for opt, arg in opts:
if opt == '-i':
input_path = arg
elif opt == '-d':
do_delete = True
elif opt == '-h':
usage(argv[0])
exit(0)
def is_password_protected(file):
command = ['7z', 't', '-p', file]
process = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
try:
process.wait()
except:
pass
return 0 != process.returncode
def extract(file):
if is_password_protected(file):
#print('Ignoring ', file, '.', sep='')
return
global do_delete
output_dir = str(file.parent) + '/' + str(file.stem)
try:
os.mkdir(output_dir)
except:
pass
output_option = '-o' + str(output_dir)
command = ['7z', 'x', file, output_option]
try:
print('Extracting: ', file, '... ', sep='', end='')
process = subprocess.Popen(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.PIPE)
process.communicate(input='Y\n'.encode())
process.wait()
if process.returncode == 0:
print('Success.')
if do_delete:
os.remove(file)
else:
print('Fail.')
except:
print('\nError while forking 7z. Is it installed correctly?')
def scandir(dir_):
#print('scandir', dir_)
global MAX_OUTPUT_LEN
global ARCHIVE_TYPES
if len(str(dir_)) >= MAX_OUTPUT_LEN:
return
for entry in Path(dir_).iterdir():
if entry.is_dir():
scandir(entry)
else:
for t in ARCHIVE_TYPES:
if t == entry.suffix:
extract(entry)
def main(argv):
global input_path, do_delete
opts(argv)
if input_path == '':
print("No input directory specified. Quiting.")
exit(1)
scandir(input_path)
if __name__ == "__main__":
main(sys.argv)