56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
# No shebang: this is only used on Windows. We use a shell script on Linux
|
|
from __future__ import print_function
|
|
|
|
import rclexecm
|
|
import sys
|
|
import os
|
|
import shutil
|
|
import platform
|
|
import subprocess
|
|
import glob
|
|
|
|
|
|
def _msg(s):
|
|
rclexecm.logmsg(s)
|
|
|
|
|
|
sysplat = platform.system()
|
|
if sysplat != "Windows":
|
|
_msg("rcluncomp.py: only for Windows")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
import msvcrt
|
|
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
|
|
except Exception as err:
|
|
_msg("setmode binary failed: %s" % str(err))
|
|
|
|
sevenz = rclexecm.which("7z")
|
|
if not sevenz:
|
|
_msg("rcluncomp.py: can't find 7z exe. Maybe set recollhelperpath " \
|
|
"in recoll.conf ?")
|
|
sys.exit(2)
|
|
|
|
# Params: uncompression program, input file name, temp directory.
|
|
# We ignore the uncomp program, and always use 7z on Windows
|
|
|
|
infile = sys.argv[2]
|
|
outdir = sys.argv[3]
|
|
# _msg("rcluncomp.py infile [%s], outdir [%s]" % (infile, outdir))
|
|
|
|
# There is apparently no way to suppress 7z output. Hopefully the
|
|
# possible deadlock described by the subprocess module doc can't occur
|
|
# here because there is little data printed. AFAIK nothing goes to stderr anyway
|
|
try:
|
|
cmd = [sevenz, "e", "-bd", "-y", "-o" + outdir, infile]
|
|
subprocess.check_output(cmd, stderr = subprocess.PIPE)
|
|
# Don't use os.path.join, we always want to use '/'
|
|
outputname = glob.glob(outdir + "/*")
|
|
# There should be only one file in there..
|
|
print(outputname[0])
|
|
except Exception as err:
|
|
_msg("%s" % (str(err),))
|
|
sys.exit(4)
|
|
|
|
sys.exit(0)
|