> 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?
It's not, turns out it is also dependent on the system too. It is documented here https://docs.python.org/3/library/subprocess.html#subprocess.Popen. Should I add a check like this instead? --- 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..5f0d94b 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, posix=(os.name == 'posix')) # 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..ceb044e 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], posix=(os.name == 'posix')) ds = self.expand(ds) if _directive == '%console': -- 2.34.1 On Wed, Jun 21, 2023 at 1:27 PM Chris Johns <chr...@rtems.org> wrote: > 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': > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel