Make run_command() use subprocess.Popen() rather than os.popen().
This lets us capture the command's stderr as well as stdout. I've been perplexed recently by errors from Mac SetFile commands that didn't report stderr.meow-7.2.2
parent
477fb26c1e
commit
d34d8e491b
|
|
@ -39,6 +39,7 @@ import shutil
|
|||
import sys
|
||||
import tarfile
|
||||
import errno
|
||||
import subprocess
|
||||
|
||||
def path_ancestors(path):
|
||||
drive, path = os.path.splitdrive(os.path.normpath(path))
|
||||
|
|
@ -366,20 +367,23 @@ class LLManifest(object):
|
|||
|
||||
def run_command(self, command):
|
||||
""" Runs an external command, and returns the output. Raises
|
||||
an exception if the command reurns a nonzero status code. For
|
||||
debugging/informational purpoases, prints out the command's
|
||||
an exception if the command returns a nonzero status code. For
|
||||
debugging/informational purposes, prints out the command's
|
||||
output as it is received."""
|
||||
print "Running command:", command
|
||||
fd = os.popen(command, 'r')
|
||||
sys.stdout.flush()
|
||||
child = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||
shell=True)
|
||||
lines = []
|
||||
while True:
|
||||
lines.append(fd.readline())
|
||||
lines.append(child.stdout.readline())
|
||||
if lines[-1] == '':
|
||||
break
|
||||
else:
|
||||
print lines[-1],
|
||||
output = ''.join(lines)
|
||||
status = fd.close()
|
||||
child.stdout.close()
|
||||
status = child.wait()
|
||||
if status:
|
||||
raise RuntimeError(
|
||||
"Command %s returned non-zero status (%s) \noutput:\n%s"
|
||||
|
|
|
|||
Loading…
Reference in New Issue