This commit adds a Run() class that can invoke Python's Popen
command.

Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com>
---
 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

Reply via email to