X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2Futils.py;h=f57a0a3f23c3406fb8a110cdf509498ff0bf7d01;hb=27c86918c2b657ef4f0bf101827aa2a7cb638cdb;hp=10607cc5a7baafd4e1aad6f46e822a584052e98d;hpb=d192e03548283e5816e749048c8107ff1315a84d;p=bootmanager.git diff --git a/source/utils.py b/source/utils.py index 10607cc..f57a0a3 100644 --- a/source/utils.py +++ b/source/utils.py @@ -11,7 +11,8 @@ # expected /proc/partitions format import os, sys, shutil -import popen2 +import subprocess +import shlex import socket import fcntl import string @@ -132,18 +133,19 @@ def sysexec( cmd, log= None, fsck = False ): 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 + try: + (stdoutdata, stderrdata) = prog.communicate() + except KeyboardInterrupt: + raise BootManagerException, "Interrupted by user" 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() @@ -162,6 +164,7 @@ def sysexec( cmd, log= None, fsck = False ): else: if returncode != 0: raise BootManagerException, "Running %s failed (rc=%d)" % (cmd,returncode) + prog = None return 1