summaryrefslogtreecommitdiff
path: root/indra/lib
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2010-06-18 17:43:30 -0400
committerNat Goodspeed <nat@lindenlab.com>2010-06-18 17:43:30 -0400
commitd34d8e491be478fddcece1f7590fbe9e07261480 (patch)
tree6d5de50b17f29aa007134e3f53e39086afc97c63 /indra/lib
parent477fb26c1ef458b6b552c7ac42bd0f18a483770f (diff)
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.
Diffstat (limited to 'indra/lib')
-rw-r--r--indra/lib/python/indra/util/llmanifest.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index 7e5b86c53f..c33a03034a 100644
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -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"