Message ID | 20230326213459.90011-1-stefasab@gmail.com |
---|---|
State | Accepted |
Commit | 774d358e0fd520ab9503447c5f8f5e1633b96e39 |
Headers | show |
Series | [FFmpeg-devel] tools/zmqshell: port to python3 | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On date Sunday 2023-03-26 23:34:59 +0200, Stefano Sabatini wrote: > Also extend docs, use argparse and logging. > --- > tools/zmqshell.py | 63 ++++++++++++++++++++++++++++++++++++++--------- > 1 file changed, 52 insertions(+), 11 deletions(-) Will apply in a few days if I see no comments.
On 3/26/23 17:34, Stefano Sabatini wrote: > Also extend docs, use argparse and logging. > --- > tools/zmqshell.py | 63 ++++++++++++++++++++++++++++++++++++++--------- > 1 file changed, 52 insertions(+), 11 deletions(-) > > diff --git a/tools/zmqshell.py b/tools/zmqshell.py > index a7d1126006..8d941636e1 100755 > --- a/tools/zmqshell.py > +++ b/tools/zmqshell.py > @@ -1,6 +1,32 @@ > -#!/usr/bin/env python2 > +#!/usr/bin/env python3 > + > +import argparse > +import cmd > +import logging > +import sys > +import zmq > + > +HELP = ''' > +Provide a shell used to send interactive commands to a zmq filter. > + > +The command assumes there is a running zmq or azmq filter acting as a > +ZMQ server. > + > +You can send a command to it, follwing the syntax: > +TARGET COMMAND [COMMAND_ARGS] > + > +* TARGET is the target filter identifier to send the command to > +* COMMAND is the name of the command sent to the filter > +* COMMAND_ARGS is the optional specification of command arguments > + > +See the zmq/azmq filters documentation for more details, and the > +zeromq documentation at: > +https://zeromq.org/ > +''' > + > +logging.basicConfig(format='zmqshell|%(levelname)s> %(message)s', level=logging.INFO) > +log = logging.getLogger() > > -import sys, zmq, cmd > > class LavfiCmd(cmd.Cmd): > prompt = 'lavfi> ' > @@ -14,13 +40,28 @@ class LavfiCmd(cmd.Cmd): > def onecmd(self, cmd): > if cmd == 'EOF': > sys.exit(0) > - print 'Sending command:[%s]' % cmd > - self.requester.send(cmd) > - message = self.requester.recv() > - print 'Received reply:[%s]' % message > - > -try: > - bind_address = sys.argv[1] if len(sys.argv) > 1 else "tcp://localhost:5555" > - LavfiCmd(bind_address).cmdloop('FFmpeg libavfilter interactive shell') > -except KeyboardInterrupt: > + log.info(f"Sending command: {cmd}") > + self.requester.send_string(cmd) > + response = self.requester.recv_string() > + log.info(f"Received response: {response}") > + > + > +class Formatter( > + argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter > +): > pass > + > + > +def main(): > + parser = argparse.ArgumentParser(description=HELP, formatter_class=Formatter) > + parser.add_argument('--bind-address', '-b', default='tcp://localhost:5555', help='specify bind address used to communicate with ZMQ') > + This changes the interface to use `--bind-address` instead of just passing the address directly as argv[1]. Does this have the potential to break anything downstream? Or do we make no promises about this interface? - Leo Izen (thebombzen)
On date Wednesday 2023-03-29 00:06:40 -0400, Leo Izen wrote: > On 3/26/23 17:34, Stefano Sabatini wrote: > > Also extend docs, use argparse and logging. > > --- > > tools/zmqshell.py | 63 ++++++++++++++++++++++++++++++++++++++--------- > > 1 file changed, 52 insertions(+), 11 deletions(-) [...] > > +def main(): > > + parser = argparse.ArgumentParser(description=HELP, formatter_class=Formatter) > > + parser.add_argument('--bind-address', '-b', default='tcp://localhost:5555', help='specify bind address used to communicate with ZMQ') > > + > This changes the interface to use `--bind-address` instead of just passing > the address directly as argv[1]. Does this have the potential to break > anything downstream? Or do we make no promises about this interface? This is mostly meant for interactive use, so I'd rather keep things simple and drop the old syntax.
On date Sunday 2023-04-02 01:21:12 +0200, Stefano Sabatini wrote: > On date Wednesday 2023-03-29 00:06:40 -0400, Leo Izen wrote: > > On 3/26/23 17:34, Stefano Sabatini wrote: > > > Also extend docs, use argparse and logging. > > > --- > > > tools/zmqshell.py | 63 ++++++++++++++++++++++++++++++++++++++--------- > > > 1 file changed, 52 insertions(+), 11 deletions(-) > [...] > > > +def main(): > > > + parser = argparse.ArgumentParser(description=HELP, formatter_class=Formatter) > > > + parser.add_argument('--bind-address', '-b', default='tcp://localhost:5555', help='specify bind address used to communicate with ZMQ') > > > + > > > This changes the interface to use `--bind-address` instead of just passing > > the address directly as argv[1]. Does this have the potential to break > > anything downstream? Or do we make no promises about this interface? > > This is mostly meant for interactive use, so I'd rather keep things > simple and drop the old syntax. Pushed.
diff --git a/tools/zmqshell.py b/tools/zmqshell.py index a7d1126006..8d941636e1 100755 --- a/tools/zmqshell.py +++ b/tools/zmqshell.py @@ -1,6 +1,32 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 + +import argparse +import cmd +import logging +import sys +import zmq + +HELP = ''' +Provide a shell used to send interactive commands to a zmq filter. + +The command assumes there is a running zmq or azmq filter acting as a +ZMQ server. + +You can send a command to it, follwing the syntax: +TARGET COMMAND [COMMAND_ARGS] + +* TARGET is the target filter identifier to send the command to +* COMMAND is the name of the command sent to the filter +* COMMAND_ARGS is the optional specification of command arguments + +See the zmq/azmq filters documentation for more details, and the +zeromq documentation at: +https://zeromq.org/ +''' + +logging.basicConfig(format='zmqshell|%(levelname)s> %(message)s', level=logging.INFO) +log = logging.getLogger() -import sys, zmq, cmd class LavfiCmd(cmd.Cmd): prompt = 'lavfi> ' @@ -14,13 +40,28 @@ class LavfiCmd(cmd.Cmd): def onecmd(self, cmd): if cmd == 'EOF': sys.exit(0) - print 'Sending command:[%s]' % cmd - self.requester.send(cmd) - message = self.requester.recv() - print 'Received reply:[%s]' % message - -try: - bind_address = sys.argv[1] if len(sys.argv) > 1 else "tcp://localhost:5555" - LavfiCmd(bind_address).cmdloop('FFmpeg libavfilter interactive shell') -except KeyboardInterrupt: + log.info(f"Sending command: {cmd}") + self.requester.send_string(cmd) + response = self.requester.recv_string() + log.info(f"Received response: {response}") + + +class Formatter( + argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter +): pass + + +def main(): + parser = argparse.ArgumentParser(description=HELP, formatter_class=Formatter) + parser.add_argument('--bind-address', '-b', default='tcp://localhost:5555', help='specify bind address used to communicate with ZMQ') + + args = parser.parse_args() + try: + LavfiCmd(args.bind_address).cmdloop('FFmpeg libavfilter interactive shell') + except KeyboardInterrupt: + pass + + +if __name__ == '__main__': + main()