[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 17/42] scripts/qmp-shell: use argparse
From: |
John Snow |
Subject: |
[PATCH 17/42] scripts/qmp-shell: use argparse |
Date: |
Mon, 7 Jun 2021 16:06:24 -0400 |
Use argparse instead of an open-coded CLI parser, for consistency with
everything else.
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/qmp/qmp-shell | 82 +++++++++++++++++--------------------------
1 file changed, 32 insertions(+), 50 deletions(-)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 970f43dd00..5317dcd516 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -64,7 +64,7 @@
# Use the -v and -p options to activate the verbose and pretty-print options,
# which will echo back the properly formatted JSON-compliant QMP that is being
# sent to QEMU, which is useful for debugging and documentation generation.
-
+import argparse
import ast
import atexit
import json
@@ -401,65 +401,47 @@ def die(msg):
sys.exit(1)
-def fail_cmdline(option=None):
- if option:
- sys.stderr.write('ERROR: bad command-line option \'%s\'\n' % option)
- sys.stderr.write(
- 'qmp-shell [ -v ] [ -p ] [ -H ] [ -N ] '
- '< UNIX socket path> | < TCP address:port >\n'
- )
- sys.stderr.write(' -v Verbose (echo command sent and received)\n')
- sys.stderr.write(' -p Pretty-print JSON\n')
- sys.stderr.write(' -H Use HMP interface\n')
- sys.stderr.write(' -N Skip negotiate (for qemu-ga)\n')
- sys.exit(1)
-
-
def main():
- addr = ''
- qemu = None
- hmp = False
- pretty = False
- verbose = False
- negotiate = True
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-H', '--hmp', action='store_true',
+ help='Use HMP interface')
+ parser.add_argument('-N', '--skip-negotiation', action='store_true',
+ help='Skip negotiate (for qemu-ga)')
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help='Verbose (echo commands sent and received)')
+ parser.add_argument('-p', '--pretty', action='store_true',
+ help='Pretty-print JSON')
+ default_server = os.environ.get('QMP_SOCKET')
+ parser.add_argument('qmp_server', action='store',
+ default=default_server,
+ help='< UNIX socket path | TCP address:port >')
+
+ args = parser.parse_args()
+ if args.qmp_server is None:
+ parser.error("QMP socket or TCP address must be specified")
+
+ qemu: QMPShell
try:
- for arg in sys.argv[1:]:
- if arg == "-H":
- if qemu is not None:
- fail_cmdline(arg)
- hmp = True
- elif arg == "-p":
- pretty = True
- elif arg == "-N":
- negotiate = False
- elif arg == "-v":
- verbose = True
- else:
- if qemu is not None:
- fail_cmdline(arg)
- if hmp:
- qemu = HMPShell(arg)
- else:
- qemu = QMPShell(arg, pretty)
- addr = arg
-
- if qemu is None:
- fail_cmdline()
+ if args.hmp:
+ qemu = HMPShell(args.qmp_server)
+ else:
+ qemu = QMPShell(args.qmp_server, args.pretty)
except qmp.QMPBadPortError:
- die('bad port number in command-line')
+ parser.error(f"Bad port number: {args.qmp_server}")
+ return # pycharm doesn't know error() is noreturn
try:
- qemu.connect(negotiate)
+ qemu.connect(negotiate=not args.skip_negotiation)
except qmp.QMPConnectError:
- die('Didn\'t get QMP greeting message')
+ die("Didn't get QMP greeting message")
except qmp.QMPCapabilitiesError:
- die('Could not negotiate capabilities')
- except OSError:
- die('Could not connect to %s' % addr)
+ die("Couldn't negotiate capabilities")
+ except OSError as err:
+ die(f"Couldn't connect to {args.qmp_server}: {err!s}")
qemu.show_banner()
- qemu.set_verbosity(verbose)
+ qemu.set_verbosity(args.verbose)
while qemu.read_exec_command(qemu.get_prompt()):
pass
qemu.close()
--
2.31.1
- [PATCH 33/42] scripts/qmp-shell: remove TODO, (continued)
- [PATCH 33/42] scripts/qmp-shell: remove TODO, John Snow, 2021/06/07
- [PATCH 23/42] scripts/qmp-shell: Fix "FuzzyJSON" parser, John Snow, 2021/06/07
- [PATCH 35/42] scripts/qmp-shell: Remove too-broad-exception, John Snow, 2021/06/07
- [PATCH 26/42] python/qmp: add QMPObject type alias, John Snow, 2021/06/07
- [PATCH 13/42] scripts/qmp-shell: rename one and two-letter variables, John Snow, 2021/06/07
- [PATCH 28/42] scripts/qmp-shell: Accept SocketAddrT instead of string, John Snow, 2021/06/07
- [PATCH 22/42] scripts/qmp-shell: move the REPL functionality into QMPShell, John Snow, 2021/06/07
- [PATCH 32/42] scripts/qmp-shell: use logging to show warnings, John Snow, 2021/06/07
- [PATCH 34/42] scripts/qmp-shell: Fix empty-transaction invocation, John Snow, 2021/06/07
- [PATCH 31/42] scripts/qmp-shell: Use context manager instead of atexit, John Snow, 2021/06/07
- [PATCH 17/42] scripts/qmp-shell: use argparse,
John Snow <=
- [PATCH 36/42] scripts/qmp-shell: convert usage comment to docstring, John Snow, 2021/06/07
- [PATCH 37/42] scripts/qmp-shell: remove double-underscores, John Snow, 2021/06/07
- [PATCH 41/42] python: add qmp-shell entry point, John Snow, 2021/06/07
- [PATCH 38/42] scripts/qmp-shell: make QMPShellError inherit QMPError, John Snow, 2021/06/07
- [PATCH 39/42] scripts/qmp-shell: add docstrings, John Snow, 2021/06/07
- [PATCH 42/42] scripts/qmp-shell: add redirection shim, John Snow, 2021/06/07
- [PATCH 40/42] scripts/qmp-shell: move to python/qemu/qmp/qmp_shell.py, John Snow, 2021/06/07
- Re: [PATCH 00/42] python: move qmp-shell into qemu.qmp package, John Snow, 2021/06/14