try:
  from commands import getstatusoutput
except ImportError:
  from subprocess import getstatusoutput
from alibuild_helpers.log import debug
from alibuild_helpers.utilities import is_string, to_unicode
import subprocess

BASH = "bash" if getstatusoutput("/bin/bash --version")[0] else "/bin/bash"

def execute(command, printer=debug):
  popen = subprocess.Popen(command, shell=is_string(command), stdout=subprocess.PIPE)
  lines_iterator = iter(popen.stdout.readline, "")
  for line in lines_iterator:
    if not line: break
    printer(to_unicode(line).strip("\n")) # yield line
  out = to_unicode(popen.communicate()[0]).strip("\n")
  if out:
    printer(out)
  return popen.returncode

def getStatusOutputBash(command):
  assert is_string(command), "only strings accepted as command"
  popen = subprocess.Popen([ BASH, "-c", command ], shell=False,
                           stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  out = to_unicode(popen.communicate()[0])
  return (popen.returncode, out)