Use subprocess instead of os.system for scripts, fix pythonw.
Previously, under Pythonw, a cmd window would open when rar/par was run. I discovered the subprocess.CREATE_NO_WINDOW flag and thus moved everything over to subprocess calls to take advantage of it.
This commit is contained in:
parent
ae4a9ae390
commit
cea85b3556
1 changed files with 18 additions and 11 deletions
29
rarpar.py
29
rarpar.py
|
@ -3,6 +3,7 @@ import os
|
||||||
import re
|
import re
|
||||||
import send2trash
|
import send2trash
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
@ -10,6 +11,10 @@ from voussoirkit import betterhelp
|
||||||
from voussoirkit import bytestring
|
from voussoirkit import bytestring
|
||||||
from voussoirkit import pathclass
|
from voussoirkit import pathclass
|
||||||
from voussoirkit import winglob
|
from voussoirkit import winglob
|
||||||
|
from voussoirkit import winwhich
|
||||||
|
|
||||||
|
WINRAR = winwhich.which('winrar')
|
||||||
|
PAR2 = winwhich.which('phpar2')
|
||||||
|
|
||||||
RESERVE_SPACE_ON_DRIVE = 30 * bytestring.GIBIBYTE
|
RESERVE_SPACE_ON_DRIVE = 30 * bytestring.GIBIBYTE
|
||||||
|
|
||||||
|
@ -58,14 +63,14 @@ def RARCOMMAND(
|
||||||
files to include
|
files to include
|
||||||
input_pattern
|
input_pattern
|
||||||
'''
|
'''
|
||||||
command = ['winrar', 'a']
|
command = [WINRAR, 'a']
|
||||||
|
|
||||||
if profile is not None:
|
if profile is not None:
|
||||||
command.append(f'-cp{profile}')
|
command.append(f'-cp{profile}')
|
||||||
|
|
||||||
command.extend([
|
command.extend([
|
||||||
'-ibck -ma -mt1 -ri1:30 -ep1',
|
'-ibck', '-ma', '-mt1', '-ri1:30', '-ep1',
|
||||||
'-y -xthumbs.db -xdesktop.ini',
|
'-y', '-xthumbs.db', '-xdesktop.ini',
|
||||||
])
|
])
|
||||||
|
|
||||||
if compression is not None:
|
if compression is not None:
|
||||||
|
@ -91,10 +96,9 @@ def RARCOMMAND(
|
||||||
else:
|
else:
|
||||||
input_pattern = path.absolute_path
|
input_pattern = path.absolute_path
|
||||||
|
|
||||||
command.append(f'"{workdir.absolute_path}{os.sep}{basename}.rar"')
|
command.append(f'{workdir.absolute_path}{os.sep}{basename}.rar')
|
||||||
command.append(f'"{input_pattern}"')
|
command.append(f'{input_pattern}')
|
||||||
|
|
||||||
command = ' '.join(command)
|
|
||||||
return command
|
return command
|
||||||
|
|
||||||
def PARCOMMAND(workdir, basename, par):
|
def PARCOMMAND(workdir, basename, par):
|
||||||
|
@ -107,13 +111,12 @@ def PARCOMMAND(workdir, basename, par):
|
||||||
workdir/basename.par2
|
workdir/basename.par2
|
||||||
'''
|
'''
|
||||||
command = [
|
command = [
|
||||||
'phpar2',
|
PAR2,
|
||||||
'c -t1',
|
'c', '-t1',
|
||||||
f'-r{par}',
|
f'-r{par}',
|
||||||
f'"{workdir.absolute_path}{os.sep}{basename}"',
|
f'{workdir.absolute_path}{os.sep}{basename}',
|
||||||
f'"{workdir.absolute_path}{os.sep}{basename}*.rar"',
|
f'{workdir.absolute_path}{os.sep}{basename}*.rar',
|
||||||
]
|
]
|
||||||
command = ' '.join(command)
|
|
||||||
return command
|
return command
|
||||||
|
|
||||||
def assert_enough_space(pathsize, workdir, moveto, rec, rev, par):
|
def assert_enough_space(pathsize, workdir, moveto, rec, rev, par):
|
||||||
|
@ -234,6 +237,10 @@ def run_script(script, dry=False):
|
||||||
print(command)
|
print(command)
|
||||||
if isinstance(command, str):
|
if isinstance(command, str):
|
||||||
status = os.system(command)
|
status = os.system(command)
|
||||||
|
elif isinstance(command, list):
|
||||||
|
# sys.stdout is None indicates pythonw.
|
||||||
|
creationflags = subprocess.CREATE_NO_WINDOW if sys.stdout is None else 0
|
||||||
|
status = subprocess.run(command, creationflags=creationflags).returncode
|
||||||
else:
|
else:
|
||||||
status = command()
|
status = command()
|
||||||
if status not in [0, None]:
|
if status not in [0, None]:
|
||||||
|
|
Loading…
Reference in a new issue