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

Chris Johns chrisj at rtems.org
Wed Jun 21 03:27:21 UTC 2023


On 21/6/2023 11:55 am, Muhammad Sulthan Mazaya wrote:
> Turns out subprocess.Popen operates on posix mode. 

Is this true for non-POSIX systems?

Where is this documented?

Chris

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 devel mailing list