code: def call(commands, *, print_result=False, raise_exception=False,
           print_commands=False):
      
      if isinstance(commands, str):
          commands = commands.split()
  
      if not (isinstance(commands, tuple) or
              isinstance(commands, list)):
          raise ValueError("Function 'call' does not accept a 'commands'"
                           "argument of type '{}'".format(type(commands)))
  
      if raise_exception:
          print_result = False
      try:
          process = subprocess.Popen(commands,
                                     stdout=subprocess.PIPE,
                                     stderr=subprocess.PIPE)
          if print_commands:
              _print_commands(commands)
  
      except:
          # TODO Why couldn't we just do 'except Exception as output'
          output = traceback.format_exc()
          result = Result(1, stderr=output)
          if print_result and not raise_exception:
              print(output, file=sys.stderr)
  
      else:
          result = _extract_output(process, print_result, raise_exception)
  
      if raise_exception and (result.returncode == 1):
          message = "An error occurred in an external process:\n\n{}"
          raise Exception(message.format(result.getStderr()))
      return result
docs: Will call a set of commands and wrangle the output how you choose