|
@@ -0,0 +1,48 @@
|
|
|
+from robot.api.deco import library, keyword
|
|
|
+from robot.libraries.BuiltIn import BuiltIn
|
|
|
+
|
|
|
+@library
|
|
|
+class Commander:
|
|
|
+
|
|
|
+ @property
|
|
|
+ def OperatingSystem(self):
|
|
|
+ self._operatingsystem = self._operatingsystem or self.BuiltIn.get_library_instance('OperatingSystem')
|
|
|
+ return self._operatingsystem
|
|
|
+
|
|
|
+ @property
|
|
|
+ def Process(self):
|
|
|
+ self._process = self._process or self.BuiltIn.get_library_instance('Process')
|
|
|
+ return self._process
|
|
|
+
|
|
|
+ @property
|
|
|
+ def BuiltIn(self):
|
|
|
+ self._builtin = self._builtin or BuiltIn()
|
|
|
+ return self._builtin
|
|
|
+
|
|
|
+ def __init__(self):
|
|
|
+ self._process = None
|
|
|
+ self._builtin = None
|
|
|
+ self._operatingsystem = None
|
|
|
+
|
|
|
+ @keyword
|
|
|
+ def execute_pipeline(self, *commands, stdout=None, append=False):
|
|
|
+ procs = []
|
|
|
+ append = (stdout and append) or False
|
|
|
+ if append:
|
|
|
+ self.OperatingSystem.append_to_file(stdout, '')
|
|
|
+ self.OperatingSystem.move_file(stdout, f'{stdout}.old')
|
|
|
+
|
|
|
+ procs.append(self.Process.start_process(*commands[0]))
|
|
|
+ prev = procs[-1]
|
|
|
+ for command in commands[1:-1]:
|
|
|
+ procs.append(self.Process.start_process(*command, stdin=prev.stdout))
|
|
|
+ prev = procs[-1]
|
|
|
+ procs.append(self.Process.start_process(
|
|
|
+ *commands[-1], stdin=prev.stdout, stdout=f'{stdout}.new' if append else stdout))
|
|
|
+ ret = self.Process.wait_for_process(procs[-1])
|
|
|
+ if append:
|
|
|
+ ret = self.Process.run_process('cat', f'{stdout}.old', f'{stdout}.new', stdout=stdout)
|
|
|
+ self.OperatingSystem.remove_file(f'{stdout}.new')
|
|
|
+ self.OperatingSystem.remove_file(f'{stdout}.old')
|
|
|
+ return ret
|
|
|
+
|