Eduardo Habkost <ehabk...@redhat.com> writes: Suggest to insert here:
If additional arguments QMP-COMMAND ARG=VAL... are given, run just that QMP command instead of the REPL. Question: is this limited to simple arguments? If no, how would I write an object argument? For instance, how would I do { "execute": "blockdev-add", "arguments": { "node-name": "foo", "driver": "nbd", "server": { "type": "inet", "host": "localhost", "port": "12345" } } } ? > This is useful for testing QMP commands in scripts. > > Example usage, combined with 'jq' for filtering the results: > > $ ./scripts/qmp/qmp-shell /tmp/qmp qom-list path=/ | jq -r .return[].name > machine > type > chardevs > backend What's jq? > $ Let's drop this line. > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > --- > Changes v1 -> v2: > * Rewritten using optparse module > --- > scripts/qmp/qmp-shell | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell > index 4b9a420..4b7374e 100755 > --- a/scripts/qmp/qmp-shell > +++ b/scripts/qmp/qmp-shell > @@ -400,7 +400,7 @@ def die(msg): > > def main(): > parser = optparse.OptionParser(description='QMP shell utility') > - parser.set_usage("%prog [options] <UNIX socket path> | <TCP > address:port>") > + parser.set_usage("%prog [options] <UNIX socket path> | <TCP > address:port> [COMMAND [ARG=VALUE]...]") > parser.add_option('-v', action='store_true', dest='verbose', > help='Verbose (echo command sent and received)') > parser.add_option('-p', action='store_true', dest='pretty', > @@ -411,10 +411,11 @@ def main(): > default=True, help='Skip negotiate (for qemu-ga)') > opts,args = parser.parse_args() > > - if len(args) != 1: > + if len(args) < 1: > parser.print_help(sys.stderr) > sys.exit(1) > addr = args[0] > + cmdargs = args[1:] > > try: > if opts.hmp: > @@ -433,10 +434,13 @@ def main(): > except qemu.error: > die('Could not connect to %s' % addr) > > - qemu.show_banner() > qemu.set_verbosity(opts.verbose) > - while qemu.read_exec_command(qemu.get_prompt()): > - pass > + if len(cmdargs): Superfluous len(). > + qemu.execute_cmdargs(cmdargs) > + else: > + qemu.show_banner() > + while qemu.read_exec_command(qemu.get_prompt()): > + pass > qemu.close() > > if __name__ == '__main__':