[Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument

Eduardo Habkost posted 5 patches 8 years, 6 months ago
There is a newer version of this series
[Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument
Posted by Eduardo Habkost 8 years, 6 months ago
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
  $

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 scripts/qmp/qmp-shell | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 6113aaf..947fc36 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -410,6 +410,10 @@ def main():
         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)')
+    parser.add_argument('cmd', metavar='COMMAND', nargs='?',
+        help='QMP command to be exeucted')
+    parser.add_argument('cmdargs', metavar='ARG=VALUE', nargs='*',
+        help='Argument to QMP command')
     args = parser.parse_args()
 
     try:
@@ -429,10 +433,13 @@ def main():
     except qemu.error:
         die('Could not connect to %s' % args.addr)
 
-    qemu.show_banner()
     qemu.set_verbosity(args.verbose)
-    while qemu.read_exec_command(qemu.get_prompt()):
-        pass
+    if args.cmd:
+        qemu.execute_cmdargs([args.cmd] + args.cmdargs)
+    else:
+        qemu.show_banner()
+        while qemu.read_exec_command(qemu.get_prompt()):
+            pass
     qemu.close()
 
 if __name__ == '__main__':
-- 
2.9.4


Re: [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument
Posted by Stefan Hajnoczi 8 years, 6 months ago
On Fri, Aug 04, 2017 at 06:36:24PM -0300, Eduardo Habkost wrote:
> 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
>   $
> 
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
>  scripts/qmp/qmp-shell | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>