diff --git a/ocrmypdf/exec/ghostscript.py b/ocrmypdf/exec/ghostscript.py index c022c4f3..ea3a4990 100644 --- a/ocrmypdf/exec/ghostscript.py +++ b/ocrmypdf/exec/ghostscript.py @@ -2,8 +2,7 @@ # © 2015 James R. Barlow: github.com/jbarlow83 from tempfile import NamedTemporaryFile -from subprocess import Popen, PIPE, STDOUT, check_call, CalledProcessError, \ - check_output +from subprocess import run, PIPE, STDOUT, CalledProcessError from shutil import copy from functools import lru_cache from . import get_program @@ -45,13 +44,12 @@ def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log, input_file ] - p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=STDOUT, - universal_newlines=True) - stdout, _ = p.communicate() - if 'error' in stdout: - log.error(stdout) # Ghostscript puts errors in stdout + p = run(args_gs, stdout=PIPE, stderr=STDOUT, + universal_newlines=True) + if 'error' in p.stdout.lower(): + log.error(p.stdout) else: - log.debug(stdout) + log.debug(p.stdout) if p.returncode == 0: copy(tmp.name, output_file) @@ -77,13 +75,12 @@ def generate_pdfa(pdf_pages, output_file, log, threads=1): "-sOutputFile=" + gs_pdf.name, ] args_gs.extend(pdf_pages) - p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=STDOUT, - universal_newlines=True) - stdout, _ = p.communicate() + p = run(args_gs, stdout=PIPE, stderr=STDOUT, + universal_newlines=True) - if 'error' in stdout or 'ERROR' in stdout: - log.error(stdout) - elif 'overprint mode not set' in stdout: + if 'error' in p.stdout.lower(): + log.error(p.stdout) + elif 'overprint mode not set' in p.stdout: # Unless someone is going to print PDF/A documents on a # magical sRGB printer I can't see the removal of overprinting # being a problem.... @@ -92,7 +89,7 @@ def generate_pdfa(pdf_pages, output_file, log, threads=1): "input file to complete PDF/A conversion. " ) else: - log.debug(stdout) + log.debug(p.stdout) if p.returncode == 0: # Ghostscript does not change return code when it fails to create diff --git a/ocrmypdf/exec/qpdf.py b/ocrmypdf/exec/qpdf.py index 7164a757..f3ae2232 100644 --- a/ocrmypdf/exec/qpdf.py +++ b/ocrmypdf/exec/qpdf.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # © 2015 James R. Barlow: github.com/jbarlow83 -from subprocess import CalledProcessError, check_output, STDOUT, check_call +from subprocess import CalledProcessError, STDOUT, run, check_output from functools import lru_cache import sys import os @@ -19,15 +19,14 @@ def version(): '--version' ] try: - versions = check_output( - args_qpdf, close_fds=True, universal_newlines=True, - stderr=STDOUT) + p = run(args_qpdf, universal_newlines=True, stderr=STDOUT, + stdout=PIPE) except CalledProcessError as e: print("Could not find qpdf executable on system PATH.", file=sys.stderr) raise MissingDependencyError() from e - qpdf_version = re.match(r'qpdf version (.+)', versions).group(1) + qpdf_version = re.match(r'qpdf version (.+)', p.stdout).group(1) return qpdf_version @@ -118,7 +117,7 @@ def split_pages(input_file, work_folder, npages): '--pages', input_file, '{0}'.format(n + 1), '--', os.path.join(work_folder, '{0:06d}.page.pdf'.format(n + 1)) ] - check_call(args_qpdf) + run(args_qpdf, check=True) def merge(input_files, output_file): @@ -129,5 +128,5 @@ def merge(input_files, output_file): args_qpdf = [ get_program('qpdf'), input_files[0], '--pages' ] + input_files + ['--', output_file] - check_call(args_qpdf) + run(args_qpdf, check=True)