From a7eae956825186b52aaa5301961421da7e1ed330 Mon Sep 17 00:00:00 2001 From: psydok <47638600+psydok@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:29:33 +0500 Subject: [PATCH 1/3] fix: z-process for tabby --- .../pdf_txtlayer_reader/tabbypdf/tabbypdf.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dedoc/readers/pdf_reader/pdf_txtlayer_reader/tabbypdf/tabbypdf.py b/dedoc/readers/pdf_reader/pdf_txtlayer_reader/tabbypdf/tabbypdf.py index 6a8421ad..213c07ae 100644 --- a/dedoc/readers/pdf_reader/pdf_txtlayer_reader/tabbypdf/tabbypdf.py +++ b/dedoc/readers/pdf_reader/pdf_txtlayer_reader/tabbypdf/tabbypdf.py @@ -19,17 +19,18 @@ def _jar_path() -> str: def _run(path: str = None, encoding: str = "utf-8") -> bytes: args = ["java"] + ["-jar", _jar_path(), "-i", path] - + process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.DEVNULL) try: - result = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.DEVNULL, check=True) - if result.stderr: - logger.warning(f"Got stderr: {result.stderr.decode(encoding)}") - return result.stdout + stdout, stderr = process.communicate() + if stderr: + logger.warning(f"Got stderr: {stderr.decode(encoding)}") + return stdout except FileNotFoundError: raise JavaNotFoundError(JAVA_NOT_FOUND_ERROR) - except subprocess.CalledProcessError as e: - logger.error(f"Error from tabby-java:\n{e.stderr.decode(encoding)}\n") - raise + finally: + if process.poll() is None: + process.terminate() + process.wait() def extract(path: str) -> dict: From 348ce86b6f61de5386a5dbc48b13b49f1af0a5d7 Mon Sep 17 00:00:00 2001 From: psydok <47638600+psydok@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:31:23 +0500 Subject: [PATCH 2/3] fix: z-process for abs --- .../concrete_converters/abstract_converter.py | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/dedoc/converters/concrete_converters/abstract_converter.py b/dedoc/converters/concrete_converters/abstract_converter.py index 0e9f5310..2f481f4a 100644 --- a/dedoc/converters/concrete_converters/abstract_converter.py +++ b/dedoc/converters/concrete_converters/abstract_converter.py @@ -60,19 +60,30 @@ def convert(self, file_path: str, parameters: Optional[dict] = None) -> str: def _run_subprocess(self, command: List[str], filename: str, expected_path: str) -> None: import os import subprocess - + + process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) try: - conversion_results = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=self.timeout) - error_message = conversion_results.stderr.decode().strip() - if len(error_message) > 0: + stdout, stderr = process.communicate(timeout=self.timeout) + error_message = stderr.decode().strip() + + if error_message: if os.path.isfile(expected_path): self.logger.warning(f"Warning on file {filename}\n{error_message}") else: error_message = f"Could not convert file {filename}\n{error_message}" self.logger.error(error_message) raise ConversionError(msg=error_message) - + except subprocess.TimeoutExpired: + process.kill() + process.wait() message = f"Conversion of the {filename} hadn't terminated after {self.timeout} seconds" self.logger.error(message) raise ConversionError(msg=message) + except Exception as e: + self.logger.error(f"An error occurred: {str(e)}") + raise + finally: + if process.poll() is None: + process.terminate() + process.wait() From 1b3d0f62e244cbae5aeb8f369592ffc40e60babf Mon Sep 17 00:00:00 2001 From: psydok <47638600+psydok@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:37:47 +0500 Subject: [PATCH 3/3] style: delete space --- dedoc/converters/concrete_converters/abstract_converter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dedoc/converters/concrete_converters/abstract_converter.py b/dedoc/converters/concrete_converters/abstract_converter.py index 2f481f4a..b4c3df1a 100644 --- a/dedoc/converters/concrete_converters/abstract_converter.py +++ b/dedoc/converters/concrete_converters/abstract_converter.py @@ -60,7 +60,7 @@ def convert(self, file_path: str, parameters: Optional[dict] = None) -> str: def _run_subprocess(self, command: List[str], filename: str, expected_path: str) -> None: import os import subprocess - + process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) try: stdout, stderr = process.communicate(timeout=self.timeout) @@ -73,7 +73,6 @@ def _run_subprocess(self, command: List[str], filename: str, expected_path: str) error_message = f"Could not convert file {filename}\n{error_message}" self.logger.error(error_message) raise ConversionError(msg=error_message) - except subprocess.TimeoutExpired: process.kill() process.wait()