import subprocess

def exec(cmd, sudo = False):
    #print(cmd)
    return subprocess.Popen(['sudo'] + cmd if sudo else cmd,
                       stderr = subprocess.PIPE,
                       stdout = subprocess.PIPE,
                       stdin = subprocess.PIPE)

def communicate(proc, cmd, success_retvals = [0]):
    data = proc.communicate()

    if proc.returncode not in success_retvals:
        raise Exception('Command failed: "' + ' '.join(cmd) + '"' + data[1].decode())

    return data[0].decode()