replace deprecated popen2 with subprocess
[bootmanager.git] / source / utils.py
index 6cd286a..b6b51c8 100644 (file)
 # expected /proc/partitions format
 
 import os, sys, shutil
-import popen2
+import subprocess
+import shlex
 import socket
 import fcntl
 import string
 import exceptions
-import hashlib
 
 from Exceptions import *
 
@@ -132,24 +132,23 @@ def sysexec( cmd, log= None ):
     """
     if VERBOSE_MODE:
         print ("sysexec >>> %s" % cmd)
-    prog= popen2.Popen4( cmd, 0 )
-    if prog is None:
+
+    try:
+        prog = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    except OSError:
         raise BootManagerException, \
-              "Unable to create instance of popen2.Popen4 " \
+              "Unable to create instance of subprocess.Popen " \
               "for command: %s" % cmd
 
+    (stdoutdata, stderrdata) = prog.communicate()
     if log is not None:
-        try:
-            for line in prog.fromchild:
-                log.write( line )
-        except KeyboardInterrupt:
-            raise BootManagerException, "Interrupted by user"
+        log.write(stdoutdata)
 
-    returncode= prog.wait()
-    if returncode != 0 and returncode != 256:
+    returncode = prog.wait()
+    if returncode != 0:
         raise BootManagerException, "Running %s failed (rc=%d)" % (cmd,returncode)
 
-    prog= None
+    prog = None
     return 1
 
 
@@ -255,7 +254,12 @@ def check_file_hash(filename, hash_filename):
 def sha1_file(filename):
     """Calculate sha1 hash of file."""
     try:
-        m = hashlib.sha1()
+        try:
+            import hashlib
+            m = hashlib.sha1()
+        except:
+            import sha
+            m=sha.new()
         f = file(filename, 'rb')
         while True:
             # 256 KB seems ideal for speed/memory tradeoff