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

Chris Johns chrisj at rtems.org
Wed Jun 21 04:10:01 UTC 2023


Module:    rtems-tools
Branch:    master
Commit:    bd2d3d5523ea203f9e0122a1def61cd2d35d74ab
Changeset: http://git.rtems.org/rtems-tools/commit/?id=bd2d3d5523ea203f9e0122a1def61cd2d35d74ab

Author:    Muhammad Sulthan Mazaya <msulthanmazaya at gmail.com>
Date:      Wed Jun 21 11:55:10 2023 +1000

rtemstoolkit: Fix shlex.split to use posix mode and add unit test for pipe operation

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':



More information about the vc mailing list