scripts/qmp-shell: use argparse
Use argparse instead of an open-coded CLI parser, for consistency with everything else. Signed-off-by: John Snow <jsnow@redhat.com> Message-id: 20210607200649.1840382-18-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
90bd8eb8dc
commit
17329be2fd
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user