79 lines
2.1 KiB
Python
Executable File
79 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# © 2015-19 James R. Barlow: github.com/jbarlow83
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
import logging
|
|
import os
|
|
import signal
|
|
import sys
|
|
from multiprocessing import set_start_method
|
|
|
|
from ocrmypdf import __version__
|
|
from ocrmypdf._plugin_manager import get_parser_options_plugins
|
|
from ocrmypdf._sync import run_pipeline
|
|
from ocrmypdf._validation import check_closed_streams, check_options
|
|
from ocrmypdf.api import Verbosity, configure_logging
|
|
from ocrmypdf.exceptions import (
|
|
BadArgsError,
|
|
ExitCode,
|
|
InputFileError,
|
|
MissingDependencyError,
|
|
)
|
|
|
|
log = logging.getLogger('ocrmypdf')
|
|
|
|
|
|
def sigbus(*args):
|
|
raise InputFileError("Lost access to the input file")
|
|
|
|
|
|
def run(args=None):
|
|
_parser, options, plugin_manager = get_parser_options_plugins(args=args)
|
|
|
|
if not check_closed_streams(options):
|
|
return ExitCode.bad_args
|
|
|
|
if hasattr(os, 'nice'):
|
|
os.nice(5)
|
|
|
|
verbosity = options.verbose
|
|
if not os.isatty(sys.stderr.fileno()):
|
|
options.progress_bar = False
|
|
if options.quiet:
|
|
verbosity = Verbosity.quiet
|
|
options.progress_bar = False
|
|
configure_logging(
|
|
verbosity,
|
|
progress_bar_friendly=options.progress_bar,
|
|
manage_root_logger=True,
|
|
plugin_manager=plugin_manager,
|
|
)
|
|
log.debug('ocrmypdf %s', __version__)
|
|
try:
|
|
check_options(options, plugin_manager)
|
|
except ValueError as e:
|
|
log.error(e)
|
|
return ExitCode.bad_args
|
|
except BadArgsError as e:
|
|
log.error(e)
|
|
return e.exit_code
|
|
except MissingDependencyError as e:
|
|
log.error(e)
|
|
return ExitCode.missing_dependency
|
|
|
|
if hasattr(signal, 'SIGBUS'):
|
|
signal.signal(signal.SIGBUS, sigbus)
|
|
|
|
result = run_pipeline(options=options, plugin_manager=plugin_manager)
|
|
return result
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if sys.platform == 'darwin' and sys.version_info < (3, 8):
|
|
set_start_method('spawn') # see python bpo-33725
|
|
sys.exit(run())
|