Source code for qip.command

# :coding: utf-8

import logging
import shlex
import subprocess


[docs]def execute(command, environ_mapping, quiet=False): """Execute *command* within *environ_mapping*. :param command: command to execute. It should be in the form of:: "python -m pip install foo" :param environ_mapping: mapping with all environment variables that must be set for the *command* to run properly. :param quiet: indicate whether output lines should be hidden. Default is False. :raise RuntimeError: if command execution fails :return: Command output. """ logger = logging.getLogger(__name__ + ".execute") logger.debug(command) process = subprocess.Popen( shlex.split(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=environ_mapping ) if not quiet: output = "" lines_iterator = iter(process.stdout.readline, b"") while process.poll() is None: for line in lines_iterator: output += line.decode("utf-8") _line = line.rstrip().decode("utf-8") logger.debug(_line) stderr = b"\n".join(process.stderr.readlines()).decode("utf-8") else: output, stderr = process.communicate() # Decode process output for display output = output.decode("utf-8") stderr = stderr.decode("utf-8") if len(stderr): raise RuntimeError(stderr) return output