Source code for stactools.core.utils.subprocess
"""Run subprocesses."""
import logging
from subprocess import PIPE, STDOUT, Popen
from typing import IO, List
logger = logging.getLogger(__name__)
[docs]
def call(command: List[str]) -> int:
"""Call a command using :py:class:`subprocess.Popen`.
The standard output of the call will be logged at the INFO level.
Args:
command (list[str]): The command to execute.
Returns:
int: The return code of the process.
"""
def log_subprocess_output(pipe: IO[bytes]) -> None:
for line in iter(pipe.readline, b""): # b'\n'-separated lines
logger.info(line.decode("utf-8").strip("\n"))
process = Popen(command, stdout=PIPE, stderr=STDOUT)
if process.stdout:
with process.stdout:
log_subprocess_output(process.stdout)
return process.wait()