[PATCH rtems-tools] rtemstoolkit: Fix shlex.split to use posix mode and add unit test for pipe operation

Muhammad Sulthan Mazaya msulthanmazaya at gmail.com
Wed Jun 21 01:55:10 UTC 2023


Turns out subprocess.Popen operates on posix mode. Also, there is an
issue with previous implementation of pipe command that is fixed by
Chris. Now, it can also accepts command in form of a string. The unit
test for that is added via this patch.

---
 rtemstoolkit/execute.py | 21 ++++++++++++++-------
 tester/rt/config.py     |  2 +-
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/rtemstoolkit/execute.py b/rtemstoolkit/execute.py
index e47aa24..3b7dcb0 100755
--- a/rtemstoolkit/execute.py
+++ b/rtemstoolkit/execute.py
@@ -392,7 +392,7 @@ class execute(object):
                         command[0] = command[0] + '.exe'
             # If a string split
             if isinstance(command, str):
-                command = shlex.split(command, posix=False)
+                command = shlex.split(command)
             # See if there is a pipe operator in the command. If present
             # split the commands by the pipe and run them with the pipe.
             # if no pipe it is the normal stdin and stdout
@@ -623,10 +623,11 @@ if __name__ == "__main__":
             proc.stdin.close()
             e.capture(proc)
             del proc
-        ec, proc = e.open(commands['open'])
-        if ec == 0:
-            e.capture(proc)
-            del proc
+        for c in commands['open']:
+            ec, proc = e.open(c)
+            if ec == 0:
+                e.capture(proc)
+                del proc
 
     def capture_output(text):
         print(text, end = '')
@@ -645,7 +646,10 @@ if __name__ == "__main__":
     commands['windows']['csubsts'] = [('netstat %0', ['-a']),
                                       ('netstat %0 %1', ['-a', '-n'])]
     commands['windows']['pipe'] = ('ftp', None, 'help\nquit')
-    commands['windows']['open'] = ["echo",  "hello rtems", "|", "findstr", "rtems"]
+    commands['windows']['open'] = [
+            ["echo",  "hello rtems", "|", "findstr", "rtems"],
+            " ".join(["echo",  "hello rtems", "|", "findstr", "rtems"])
+            ]
     commands['unix']['shell'] = ['pwd', 'ls -las', './xyz', sh_shell_test]
     commands['unix']['spawn'] = ['ls', 'execute.pyc', ['ls', '-i']]
     commands['unix']['cmd'] = [('date'), ('date', '-R'), ('date', ['-u', '+%d %D']),
@@ -653,7 +657,10 @@ if __name__ == "__main__":
     commands['unix']['csubsts'] = [('date %0 "+%d %D %S"', ['-u']),
                                    ('date %0 %1', ['-u', '+%d %D %S'])]
     commands['unix']['pipe'] = ('grep', 'hello', 'hello world')
-    commands['unix']['open'] = ["echo", "hello world", "|", "cut", "-d ", "-f2"]
+    commands['unix']['open'] = [
+            ["echo", "hello world", "|", "cut", "-d ", "-f2"],
+            " ".join(["echo", "hello world", "|", "cut", "-d\" \"", "-f2"])
+            ]
 
     print(arg_list('cmd a1 a2 "a3 is a string" a4'))
     print(arg_list('cmd b1 b2 "b3 is a string a4'))
diff --git a/tester/rt/config.py b/tester/rt/config.py
index c0c31de..3b12c6c 100644
--- a/tester/rt/config.py
+++ b/tester/rt/config.py
@@ -327,7 +327,7 @@ class file(config.file):
             if len(_data):
                 ds = [_data[0]]
                 if len(_data) > 1:
-                    ds += shlex.split(_data[1], posix=False)
+                    ds += shlex.split(_data[1])
             ds = self.expand(ds)
 
             if _directive == '%console':
-- 
2.34.1



More information about the devel mailing list