From d34d8e491be478fddcece1f7590fbe9e07261480 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Fri, 18 Jun 2010 17:43:30 -0400
Subject: 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.

---
 indra/lib/python/indra/util/llmanifest.py | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

(limited to 'indra')

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"
-- 
cgit v1.2.3