On Fri, Jun 21, 2019 at 3:46 PM Tom Hromatka <tom.hroma...@oracle.com> wrote: > > This commit adds a Run() class that can invoke Python's Popen > command. >
Same comment here. More information. > Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com> You can add my reviewed-by once the commit log is fixed up. > --- > tests/ftests/run.py | 73 > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 73 insertions(+) > create mode 100644 tests/ftests/run.py > > diff --git a/tests/ftests/run.py b/tests/ftests/run.py > new file mode 100644 > index 0000000..477770d > --- /dev/null > +++ b/tests/ftests/run.py > @@ -0,0 +1,73 @@ > +#!/usr/bin/env python > +# > +# Run class for the libcgroup functional tests > +# > +# Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved. > +# Author: Tom Hromatka <tom.hroma...@oracle.com> > +# > + > +# > +# This library is free software; you can redistribute it and/or modify it > +# under the terms of version 2.1 of the GNU Lesser General Public License as > +# published by the Free Software Foundation. > +# > +# This library is distributed in the hope that it will be useful, but WITHOUT > +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public > License > +# for more details. > +# > +# You should have received a copy of the GNU Lesser General Public License > +# along with this library; if not, see <http://www.gnu.org/licenses>. > +# > + > +from log import Log > +import subprocess > +import time > +import types > + > + > +class Run(object): > + @staticmethod > + def run(command, shell_bool=False): > + if shell_bool: > + if type(command) is types.StringType: > + # nothing to do. command is already formatted as a string > + pass > + elif type(command) is types.ListType: > + command = " ".join(command) > + else: > + raise ValueError('Unsupported command type') > + > + subproc = subprocess.Popen(command, shell=shell_bool, > + stdout=subprocess.PIPE, > + stderr=subprocess.PIPE) > + out, err = subproc.communicate() > + ret = subproc.returncode > + > + out = out.strip() > + err = err.strip() > + > + if shell_bool: > + Log.log_debug("run:\n\tcommand = %s\n\tret = %d\n\tstdout = > %s\n\tstderr = %s" % > + (command, ret, out, err)) > + else: > + Log.log_debug("run:\n\tcommand = %s\n\tret = %d\n\tstdout = > %s\n\tstderr = %s" % > + (" ".join(command), ret, out, err)) > + > + if ret != 0: > + raise RunError("Command '%s' failed" % " ".join(command), ret, > out, err) > + > + return out > + > +class RunError(Exception): > + def __init__(self, message, ret, stdout, stderr): > + super(RunError, self).__init__(message) > + > + self.ret = ret > + self.stdout = stdout > + self.stderr = stderr > + > + def __str__(self): > + out_str = "RunError:\n\tmessage = %s\n\tret = %d" % (self.message, > self.ret) > + out_str += "\n\tstdout = %s\n\tstderr = %s" % (self.stdout, > self.stderr) > + return out_str > -- > 1.8.3.1 > > > > _______________________________________________ > Libcg-devel mailing list > Libcg-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/libcg-devel _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel