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 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel