[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module |
Date: |
Fri, 4 Aug 2017 18:36:21 -0300 |
It makes command-line parsing and generation of help text much
simpler.
Signed-off-by: Eduardo Habkost <address@hidden>
---
scripts/qmp/qmp-shell | 61 +++++++++++++++++----------------------------------
1 file changed, 20 insertions(+), 41 deletions(-)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 860ffb2..c276b90 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -73,6 +73,7 @@ import sys
import os
import errno
import atexit
+import argparse
class QMPCompleter(list):
def complete(self, text, state):
@@ -393,61 +394,39 @@ def die(msg):
sys.stderr.write('ERROR: %s\n' % 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(description='QMP shell utility')
+ parser.add_argument('-v', action='store_true', dest='verbose',
+ help='Verbose (echo command sent and received)')
+ parser.add_argument('-p', action='store_true', dest='pretty',
+ help='Pretty-print JSON')
+ parser.add_argument('-H', action='store_true', dest='hmp',
+ help='Use HMP interface')
+ parser.add_argument('-N', action='store_false', dest='negotiate',
+ default=True, help='Skip negotiate (for qemu-ga)')
+ parser.add_argument('addr', metavar='ADDRESS',
+ help='QMP socket address (Unix socket path or TCP address:port)')
+ args = parser.parse_args()
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.addr)
+ else:
+ qemu = QMPShell(args.addr, args.pretty)
except QMPShellBadPort:
die('bad port number in command-line')
try:
- qemu.connect(negotiate)
+ qemu.connect(args.negotiate)
except qmp.QMPConnectError:
die('Didn\'t get QMP greeting message')
except qmp.QMPCapabilitiesError:
die('Could not negotiate capabilities')
except qemu.error:
- die('Could not connect to %s' % addr)
+ die('Could not connect to %s' % args.addr)
qemu.show_banner()
- qemu.set_verbosity(verbose)
+ qemu.set_verbosity(args.verbose)
while qemu.read_exec_command(qemu.get_prompt()):
pass
qemu.close()
--
2.9.4
- [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp, Eduardo Habkost, 2017/08/04
- [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument, Eduardo Habkost, 2017/08/04
- [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method, Eduardo Habkost, 2017/08/04
- [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp, Eduardo Habkost, 2017/08/04
- [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module,
Eduardo Habkost <=
- [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd(), Eduardo Habkost, 2017/08/04
- Re: [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp, Fam Zheng, 2017/08/05
- Re: [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp, John Snow, 2017/08/07