From patchwork Sun Mar 26 21:34:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Sabatini X-Patchwork-Id: 40847 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7a30:b0:df:834d:2c1a with SMTP id t48csp867460pzh; Sun, 26 Mar 2023 14:35:13 -0700 (PDT) X-Google-Smtp-Source: AKy350aW7zY5KWBxedGPXLjd2kHWK/iN0a/QL9rejV06fKH35RXnTRJDs9IV7ukIhLwf/iavTfBt X-Received: by 2002:a17:906:55cd:b0:933:1134:be1e with SMTP id z13-20020a17090655cd00b009331134be1emr9400060ejp.53.1679866513471; Sun, 26 Mar 2023 14:35:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679866513; cv=none; d=google.com; s=arc-20160816; b=xaKCROTTYt2UuGdJRRNOtAt22Ilx4EWFyPuCt/cbxDk5XQGHw0Y5eRz4W4vhBKL7IL jhCpTYf/uSvgQaNTL8D7KFATH+e69jdX4PoGZaFHJNlTraCkGjdeFCm5CGX98HhrKVXS 3A7hWc1u46GOLqGJgAZNzSj+wiCZR1Jv1AlXRT55nH1uMMHuT45zPc1LfbG5cFfFadLP T/IbtXWtqQQrmMJIJPQUwpHnVzdGCzCJqxHWps9zYgFWxJH5ZVJWMUgLIBbEZnkuid8I kt/AVH6ikan+tNhphUZMMFla38FcLT0EZxNUv+sXgEEdzvlzePZeOJfLYmIAsqJWTNSS 16zQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=ach7g9BbxTbZ2XL1xXzLlU6Omn6r0HN4mOpaZxMiXjs=; b=oOjjB1axbbYdsU/eeGo6q0GHR1WJDS6fwdHHCLY3i+tziVHZi+et4YllzrigqRdveq keCv7VzXCRShHZoiohqfS6z+p6EHNYrLvR96718CjeW0xIzxnOQvLiVnhqv/3iiLRGln yKRN/cb6HLtM3exbsw0PUDPm0VnIZV1RMVoTTfJeeyH2H2gcrj74JEF5Ls78x7l0MOu9 dyo7/b6lXvPczwqPbXO1NYHRfZwEdE1VrQfTzbMUmHbjrNTZemhd7TlmknjSzhY+bf2s SRcbgcHdp/XfjA4IprPIrbYIhugYjTI+ACGJZosjx8N4EqIi6n9h8C9Dhvx+eccTWKa6 ZDNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="DQ/Q08uP"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m9-20020a17090607c900b008da063a965fsi25783466ejc.937.2023.03.26.14.35.12; Sun, 26 Mar 2023 14:35:13 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="DQ/Q08uP"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E8DA068C513; Mon, 27 Mar 2023 00:35:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E80568C513 for ; Mon, 27 Mar 2023 00:35:03 +0300 (EEST) Received: by mail-wr1-f46.google.com with SMTP id m2so6742944wrh.6 for ; Sun, 26 Mar 2023 14:35:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679866501; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=1mTBpKTXP9cm+vx1MjR2pW+jfVXjKnNJ+91i+N5K60c=; b=DQ/Q08uPXwqoHIexJfCOPgYokVhxHGsoLFyjRn/6rrIxyrkIGx18bFDhjXYO+fgXgI 3IzqjclNeSwDU3vGQ3tvS6jXnm/wbDAF93RFRxNTROLGLJCSIWijw713YMgxgINQ3E19 D8Fkw6YaZs9CychSwF1UZa6qQZ7k3WSqafKXLYyI5qYRTFlee8/nDC8RWiXG6V6LWLnE s9ggWi8jOV3CU7UZi1bDgTMFzwxm4p09NPn/j7bhbb5sPZGQ6VN+gA5Mt1pgYCc0vR2f idhhHgJFi35OUVXL7QuyaWnzFv6pX9YrU+R5rRr1gYO032NaHT7B1MxFOH6RefRWE8Ox v7sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679866501; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1mTBpKTXP9cm+vx1MjR2pW+jfVXjKnNJ+91i+N5K60c=; b=QcGITSiRmN+f3hq+3Bj7Tg5Hg+sb1mGjkOQ6i2k3qxYlxv0BZK97nO3e6UtdoFDGxr sBIjZcFbDrLtVJx7gYRMuvL3zsyFuqBaZjaWFUuJKKvnsoqN2viXp0Fn14Vk89ypKT2A vS1L6ORuJ+hsighngGClBRggnUTLms7R/Z+S/hrCVIF3gNDxGJxDbb8uKmen+z2lG9+h ZB2TM4Fwv7qwWeDvF8hdGuc8h8vVEdoZ5Lf3GvWOQS6kLfoo6RI/pl4MziBrFlQtJBws 1yIM9hNidFmvdVc1/eldnS1MS05kpy5vIB9KgV+m3SbOr01peG+g2wkLjrbOHFvwtizF D49w== X-Gm-Message-State: AAQBX9cqvdOa2GF0+Yhu6A7/7Cs2lzEM6g1sPR3BfgYNuHocyUdvVfoP mrIxoYOJ61MiT/LXrj6oN1/H6KVcdhc= X-Received: by 2002:adf:eb0b:0:b0:2d8:4e4:8cf1 with SMTP id s11-20020adfeb0b000000b002d804e48cf1mr7222268wrn.21.1679866501233; Sun, 26 Mar 2023 14:35:01 -0700 (PDT) Received: from mariano (dynamic-adsl-62-10-98-143.clienti.tiscali.it. [62.10.98.143]) by smtp.gmail.com with ESMTPSA id g9-20020a5d4889000000b002c559843748sm23405434wrq.10.2023.03.26.14.35.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Mar 2023 14:35:00 -0700 (PDT) Received: by mariano (Postfix, from userid 1000) id 921BFBFB73; Sun, 26 Mar 2023 23:34:59 +0200 (CEST) From: Stefano Sabatini To: FFmpeg development discussions and patches Date: Sun, 26 Mar 2023 23:34:59 +0200 Message-Id: <20230326213459.90011-1-stefasab@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] tools/zmqshell: port to python3 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Stefano Sabatini Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: j6hSnxEt0yPn 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') + + args = parser.parse_args() + try: + LavfiCmd(args.bind_address).cmdloop('FFmpeg libavfilter interactive shell') + except KeyboardInterrupt: + pass + + +if __name__ == '__main__': + main()