On 08/06/2009 11:23 AM, Joel Granados Moreno wrote: > --- > iutil.py | 37 +++++++++++++++++++++++++++++++++++-- > 1 files changed, 35 insertions(+), 2 deletions(-) > > diff --git a/iutil.py b/iutil.py > index ec25adb..5b91310 100644 > --- a/iutil.py > +++ b/iutil.py > @@ -55,10 +55,19 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, > if not searchPath and not os.access (command, os.X_OK): > raise RuntimeError, command + " can not be run" > > + def closefds (): > + runningLog.close() > + stdinclose() > + stdoutclose() > + stderrclose() > + > + stdinclose = stdoutclose = stderrclose = lambda : None > + > argv = list(argv) > if isinstance(stdin, str): > if os.access(stdin, os.R_OK): > stdin = os.open(stdin, os.O_RDONLY) > + stdinclose = lambda : os.close(stdin) > else: > stdin = sys.stdin.fileno() > elif isinstance(stdin, int): > @@ -68,6 +77,7 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, > > if isinstance(stdout, str): > stdout = os.open(stdout, os.O_RDWR|os.O_CREAT) > + stdoutclose = lambda : os.close(stdout) > elif isinstance(stdout, int): > pass > elif stdout is None or not isinstance(stdout, file): > @@ -75,6 +85,7 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, > > if isinstance(stderr, str): > stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) > + stderrclose = lambda : os.close(stderr) > elif isinstance(stderr, int): > pass > elif stderr is None or not isinstance(stderr, file): > @@ -109,10 +120,10 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, > errstr = "Error running %s: %s" % (command, e.strerror) > log.error(errstr) > runningLog.write(errstr) > - runningLog.close() > + closefds() > raise RuntimeError, errstr > > - runningLog.close() > + closefds() > return ret > > ## Run an external program and capture standard out. > @@ -126,12 +137,19 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): > def chroot(): > os.chroot(root) > > + def closefds (): > + runningLog.close() > + stdinclose() > + stderrclose() > + > + stdinclose = stderrclose = lambda : None > rc = "" > argv = list(argv) > > if isinstance(stdin, str): > if os.access(stdin, os.R_OK): > stdin = os.open(stdin, os.O_RDONLY) > + stdinclose = lambda : os.close(stdin) > else: > stdin = sys.stdin.fileno() > elif isinstance(stdin, int): > @@ -141,6 +159,7 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): > > if isinstance(stderr, str): > stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) > + stderrclose = lambda : os.close(stderr) > elif isinstance(stderr, int): > pass > elif stderr is None or not isinstance(stderr, file): > @@ -172,8 +191,10 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): > break > except OSError as e: > log.error ("Error running " + command + ": " + e.strerror) > + closefds() > raise RuntimeError, "Error running " + command + ": " + e.strerror > > + closefds() > return rc > > def execWithPulseProgress(command, argv, stdin = None, stdout = None, > @@ -181,10 +202,19 @@ def execWithPulseProgress(command, argv, stdin = None, stdout = None, > def chroot(): > os.chroot(root) > > + def closefds (): > + runningLog.close() > + stdinclose() > + stdoutclose() > + stderrclose() > + > + stdinclose = stdoutclose = stderrclose = lambda : None > + > argv = list(argv) > if isinstance(stdin, str): > if os.access(stdin, os.R_OK): > stdin = os.open(stdin, os.O_RDONLY) > + stdinclose = lambda : os.close(stdin) > else: > stdin = sys.stdin.fileno() > elif isinstance(stdin, int): > @@ -194,6 +224,7 @@ def execWithPulseProgress(command, argv, stdin = None, stdout = None, > > if isinstance(stdout, str): > stdout = os.open(stdout, os.O_RDWR|os.O_CREAT) > + stdoutclose = lambda : os.close(stdout) > elif isinstance(stdout, int): > pass > elif stdout is None or not isinstance(stdout, file): > @@ -201,6 +232,7 @@ def execWithPulseProgress(command, argv, stdin = None, stdout = None, > > if isinstance(stderr, str): > stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) > + stderrclose = lambda : os.close(stderr) > elif isinstance(stderr, int): > pass > elif stderr is None or not isinstance(stderr, file): > @@ -257,6 +289,7 @@ def execWithPulseProgress(command, argv, stdin = None, stdout = None, > > progress and progress.pop() > > + closefds() > # *shrug* no clue why this would happen, but hope that things are fine > if status is None: > return 0 This looks right to me. -- Peter The Shuttle is now going five times the sound of speed. -- Dan Rather, first landing of Columbia _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list