* [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp
@ 2017-08-04 21:36 Eduardo Habkost
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module Eduardo Habkost
` (6 more replies)
0 siblings, 7 replies; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-04 21:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
This series adds the ability to run QMP commands
non-interactively to qmp-shell, and deletes scripts/qmp/qmp.
Eduardo Habkost (5):
qmp-shell: Use argparse module
qmp-shell: Pass split cmdargs to __build_cmd()
qmp-shell: execute_cmdargs() method
qmp-shell: Accept QMP command as argument
Remove scripts/qmp/qmp
scripts/qmp/qmp | 126 --------------------------------------------------
scripts/qmp/qmp-shell | 90 ++++++++++++++++--------------------
2 files changed, 40 insertions(+), 176 deletions(-)
delete mode 100755 scripts/qmp/qmp
--
2.9.4
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
@ 2017-08-04 21:36 ` Eduardo Habkost
2017-08-08 10:07 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd() Eduardo Habkost
` (5 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-04 21:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
It makes command-line parsing and generation of help text much
simpler.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
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
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd()
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module Eduardo Habkost
@ 2017-08-04 21:36 ` Eduardo Habkost
2017-08-08 10:09 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method Eduardo Habkost
` (4 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-04 21:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
This will allow us to implement a method to run a command that is
already split in a list.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
scripts/qmp/qmp-shell | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index c276b90..5fe6162 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -212,15 +212,13 @@ class QMPShell(qmp.QEMUMonitorProtocol):
raise QMPShellError('Cannot set "%s" multiple times' % key)
parent[optpath[-1]] = value
- def __build_cmd(self, cmdline):
+ def __build_cmd(self, cmdargs):
"""
Build a QMP input object from a user provided command-line in the
following format:
< command-name > [ arg-name1=arg1 ] ... [ arg-nameN=argN ]
"""
- cmdargs = cmdline.split()
-
# Transactional CLI entry/exit:
if cmdargs[0] == 'transaction(':
self._transmode = True
@@ -247,7 +245,7 @@ class QMPShell(qmp.QEMUMonitorProtocol):
finalize = True
self.__cli_expr(cmdargs[1:], action['data'])
self._actions.append(action)
- return self.__build_cmd(')') if finalize else None
+ return self.__build_cmd([')']) if finalize else None
# Standard command: parse and return it to be executed.
qmpcmd = { 'execute': cmdargs[0], 'arguments': {} }
@@ -262,8 +260,9 @@ class QMPShell(qmp.QEMUMonitorProtocol):
print str(jsobj)
def _execute_cmd(self, cmdline):
+ cmdargs = cmdline.split()
try:
- qmpcmd = self.__build_cmd(cmdline)
+ qmpcmd = self.__build_cmd(cmdargs)
except Exception as e:
print 'Error while parsing command line: %s' % e
print 'command format: <command-name> ',
--
2.9.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module Eduardo Habkost
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd() Eduardo Habkost
@ 2017-08-04 21:36 ` Eduardo Habkost
2017-08-08 10:09 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument Eduardo Habkost
` (3 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-04 21:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
This will allow us to execute a command that was already split in
a list.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
scripts/qmp/qmp-shell | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 5fe6162..6113aaf 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -260,7 +260,9 @@ class QMPShell(qmp.QEMUMonitorProtocol):
print str(jsobj)
def _execute_cmd(self, cmdline):
- cmdargs = cmdline.split()
+ return self.execute_cmdargs(cmdline.split())
+
+ def execute_cmdargs(self, cmdargs):
try:
qmpcmd = self.__build_cmd(cmdargs)
except Exception as e:
@@ -386,6 +388,9 @@ class HMPShell(QMPShell):
print '%s: %s' % (resp['error']['class'], resp['error']['desc'])
return True
+ def execute_cmdargs(self, cmdargs):
+ return self._execute_cmd(' '.join(cmdargs))
+
def show_banner(self):
QMPShell.show_banner(self, msg='Welcome to the HMP shell!')
--
2.9.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
` (2 preceding siblings ...)
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method Eduardo Habkost
@ 2017-08-04 21:36 ` Eduardo Habkost
2017-08-08 10:11 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp Eduardo Habkost
` (2 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-04 21:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
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
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
` (3 preceding siblings ...)
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument Eduardo Habkost
@ 2017-08-04 21:36 ` Eduardo Habkost
2017-08-08 10:11 ` Stefan Hajnoczi
2017-08-05 14:56 ` [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Fam Zheng
2017-08-07 22:20 ` John Snow
6 siblings, 1 reply; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-04 21:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
The only purpose of scripts/qmp/qmp was the ability to run QMP
commands non-interactively. Now it is possible to run qmp-shell
non-interactively by providing a QMP command a command-line
argument, making scripts/qmp/qmp obsolete.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
scripts/qmp/qmp | 126 --------------------------------------------------------
1 file changed, 126 deletions(-)
delete mode 100755 scripts/qmp/qmp
diff --git a/scripts/qmp/qmp b/scripts/qmp/qmp
deleted file mode 100755
index 514b539..0000000
--- a/scripts/qmp/qmp
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/python
-#
-# QMP command line tool
-#
-# Copyright IBM, Corp. 2011
-#
-# Authors:
-# Anthony Liguori <aliguori@us.ibm.com>
-#
-# This work is licensed under the terms of the GNU GPLv2 or later.
-# See the COPYING file in the top-level directory.
-
-import sys, os
-from qmp import QEMUMonitorProtocol
-
-def print_response(rsp, prefix=[]):
- if type(rsp) == list:
- i = 0
- for item in rsp:
- if prefix == []:
- prefix = ['item']
- print_response(item, prefix[:-1] + ['%s[%d]' % (prefix[-1], i)])
- i += 1
- elif type(rsp) == dict:
- for key in rsp.keys():
- print_response(rsp[key], prefix + [key])
- else:
- if len(prefix):
- print '%s: %s' % ('.'.join(prefix), rsp)
- else:
- print '%s' % (rsp)
-
-def main(args):
- path = None
-
- # Use QMP_PATH if it's set
- if os.environ.has_key('QMP_PATH'):
- path = os.environ['QMP_PATH']
-
- while len(args):
- arg = args[0]
-
- if arg.startswith('--'):
- arg = arg[2:]
- if arg.find('=') == -1:
- value = True
- else:
- arg, value = arg.split('=', 1)
-
- if arg in ['path']:
- if type(value) == str:
- path = value
- elif arg in ['help']:
- os.execlp('man', 'man', 'qmp')
- else:
- print 'Unknown argument "%s"' % arg
-
- args = args[1:]
- else:
- break
-
- if not path:
- print "QMP path isn't set, use --path=qmp-monitor-address or set QMP_PATH"
- return 1
-
- if len(args):
- command, args = args[0], args[1:]
- else:
- print 'No command found'
- print 'Usage: "qmp [--path=qmp-monitor-address] qmp-cmd arguments"'
- return 1
-
- if command in ['help']:
- os.execlp('man', 'man', 'qmp')
-
- srv = QEMUMonitorProtocol(path)
- srv.connect()
-
- def do_command(srv, cmd, **kwds):
- rsp = srv.cmd(cmd, kwds)
- if rsp.has_key('error'):
- raise Exception(rsp['error']['desc'])
- return rsp['return']
-
- commands = map(lambda x: x['name'], do_command(srv, 'query-commands'))
-
- srv.close()
-
- if command not in commands:
- fullcmd = 'qmp-%s' % command
- try:
- os.environ['QMP_PATH'] = path
- os.execvp(fullcmd, [fullcmd] + args)
- except OSError as exc:
- if exc.errno == 2:
- print 'Command "%s" not found.' % (fullcmd)
- return 1
- raise
- return 0
-
- srv = QEMUMonitorProtocol(path)
- srv.connect()
-
- arguments = {}
- for arg in args:
- if not arg.startswith('--'):
- print 'Unknown argument "%s"' % arg
- return 1
-
- arg = arg[2:]
- if arg.find('=') == -1:
- value = True
- else:
- arg, value = arg.split('=', 1)
-
- if arg in ['help']:
- os.execlp('man', 'man', 'qmp-%s' % command)
- return 1
-
- arguments[arg] = value
-
- rsp = do_command(srv, command, **arguments)
- print_response(rsp)
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
--
2.9.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
` (4 preceding siblings ...)
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp Eduardo Habkost
@ 2017-08-05 14:56 ` Fam Zheng
2017-08-05 19:11 ` Eduardo Habkost
2017-08-07 22:20 ` John Snow
6 siblings, 1 reply; 17+ messages in thread
From: Fam Zheng @ 2017-08-05 14:56 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
On Fri, 08/04 18:36, Eduardo Habkost wrote:
> This series adds the ability to run QMP commands
> non-interactively to qmp-shell, and deletes scripts/qmp/qmp.
Hmm, not so simple:
$ git grep 'import qmp'
scripts/qemu.py:import qmp.qmp
scripts/qmp/qemu-ga-client:import qmp
scripts/qmp/qmp-shell:import qmp
scripts/qtest.py:import qmp.qmp
tests/migration/guestperf/engine.py:import qmp.qmp
Fam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp
2017-08-05 14:56 ` [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Fam Zheng
@ 2017-08-05 19:11 ` Eduardo Habkost
2017-08-07 2:26 ` Fam Zheng
0 siblings, 1 reply; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-05 19:11 UTC (permalink / raw)
To: Fam Zheng; +Cc: qemu-devel, armbru
On Sat, Aug 05, 2017 at 10:56:20PM +0800, Fam Zheng wrote:
> On Fri, 08/04 18:36, Eduardo Habkost wrote:
> > This series adds the ability to run QMP commands
> > non-interactively to qmp-shell, and deletes scripts/qmp/qmp.
>
> Hmm, not so simple:
>
> $ git grep 'import qmp'
> scripts/qemu.py:import qmp.qmp
> scripts/qmp/qemu-ga-client:import qmp
> scripts/qmp/qmp-shell:import qmp
> scripts/qtest.py:import qmp.qmp
> tests/migration/guestperf/engine.py:import qmp.qmp
I'm deleting scripts/qmp/qmp, not scripts/qmp/qmp.py.
--
Eduardo
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp
2017-08-05 19:11 ` Eduardo Habkost
@ 2017-08-07 2:26 ` Fam Zheng
0 siblings, 0 replies; 17+ messages in thread
From: Fam Zheng @ 2017-08-07 2:26 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
On Sat, 08/05 16:11, Eduardo Habkost wrote:
> On Sat, Aug 05, 2017 at 10:56:20PM +0800, Fam Zheng wrote:
> > On Fri, 08/04 18:36, Eduardo Habkost wrote:
> > > This series adds the ability to run QMP commands
> > > non-interactively to qmp-shell, and deletes scripts/qmp/qmp.
> >
> > Hmm, not so simple:
> >
> > $ git grep 'import qmp'
> > scripts/qemu.py:import qmp.qmp
> > scripts/qmp/qemu-ga-client:import qmp
> > scripts/qmp/qmp-shell:import qmp
> > scripts/qtest.py:import qmp.qmp
> > tests/migration/guestperf/engine.py:import qmp.qmp
>
> I'm deleting scripts/qmp/qmp, not scripts/qmp/qmp.py.
Yeah, OK, I was confused.
Fam
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
` (5 preceding siblings ...)
2017-08-05 14:56 ` [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Fam Zheng
@ 2017-08-07 22:20 ` John Snow
6 siblings, 0 replies; 17+ messages in thread
From: John Snow @ 2017-08-07 22:20 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel; +Cc: armbru
On 08/04/2017 05:36 PM, Eduardo Habkost wrote:
> This series adds the ability to run QMP commands
> non-interactively to qmp-shell, and deletes scripts/qmp/qmp.
>
> Eduardo Habkost (5):
> qmp-shell: Use argparse module
> qmp-shell: Pass split cmdargs to __build_cmd()
> qmp-shell: execute_cmdargs() method
> qmp-shell: Accept QMP command as argument
> Remove scripts/qmp/qmp
>
> scripts/qmp/qmp | 126 --------------------------------------------------
> scripts/qmp/qmp-shell | 90 ++++++++++++++++--------------------
> 2 files changed, 40 insertions(+), 176 deletions(-)
> delete mode 100755 scripts/qmp/qmp
>
Assuming there are no reasons to keep the old script around (I certainly
never used it) this appears to be fine. May as well fortify one really
good QMP tool instead of a dozen little half baked ones.
Tested-by: John Snow <jsnow@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module Eduardo Habkost
@ 2017-08-08 10:07 ` Stefan Hajnoczi
2017-08-08 10:11 ` Daniel P. Berrange
2017-08-08 12:57 ` Eduardo Habkost
0 siblings, 2 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2017-08-08 10:07 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 602 bytes --]
On Fri, Aug 04, 2017 at 06:36:21PM -0300, Eduardo Habkost wrote:
> It makes command-line parsing and generation of help text much
> simpler.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> scripts/qmp/qmp-shell | 61 +++++++++++++++++----------------------------------
> 1 file changed, 20 insertions(+), 41 deletions(-)
The minimum Python version is 2.6. The argparse module was introduced
in Python 2.7 so we cannot use it without increasing the minimum Python
version:
https://docs.python.org/2.6/modindex.html
I suggest holding off on this for now.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd()
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd() Eduardo Habkost
@ 2017-08-08 10:09 ` Stefan Hajnoczi
0 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2017-08-08 10:09 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 376 bytes --]
On Fri, Aug 04, 2017 at 06:36:22PM -0300, Eduardo Habkost wrote:
> This will allow us to implement a method to run a command that is
> already split in a list.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> scripts/qmp/qmp-shell | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method Eduardo Habkost
@ 2017-08-08 10:09 ` Stefan Hajnoczi
0 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2017-08-08 10:09 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 356 bytes --]
On Fri, Aug 04, 2017 at 06:36:23PM -0300, Eduardo Habkost wrote:
> This will allow us to execute a command that was already split in
> a list.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> scripts/qmp/qmp-shell | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module
2017-08-08 10:07 ` Stefan Hajnoczi
@ 2017-08-08 10:11 ` Daniel P. Berrange
2017-08-08 12:57 ` Eduardo Habkost
1 sibling, 0 replies; 17+ messages in thread
From: Daniel P. Berrange @ 2017-08-08 10:11 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Eduardo Habkost, qemu-devel, armbru
On Tue, Aug 08, 2017 at 11:07:21AM +0100, Stefan Hajnoczi wrote:
> On Fri, Aug 04, 2017 at 06:36:21PM -0300, Eduardo Habkost wrote:
> > It makes command-line parsing and generation of help text much
> > simpler.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > scripts/qmp/qmp-shell | 61 +++++++++++++++++----------------------------------
> > 1 file changed, 20 insertions(+), 41 deletions(-)
>
> The minimum Python version is 2.6. The argparse module was introduced
> in Python 2.7 so we cannot use it without increasing the minimum Python
> version:
>
> https://docs.python.org/2.6/modindex.html
>
> I suggest holding off on this for now.
Although its deprecated, perhaps we can use optparse instead ? It is
available in py2 & 3 and very similar to argparse.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument Eduardo Habkost
@ 2017-08-08 10:11 ` Stefan Hajnoczi
0 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2017-08-08 10:11 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 548 bytes --]
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>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp Eduardo Habkost
@ 2017-08-08 10:11 ` Stefan Hajnoczi
0 siblings, 0 replies; 17+ messages in thread
From: Stefan Hajnoczi @ 2017-08-08 10:11 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 589 bytes --]
On Fri, Aug 04, 2017 at 06:36:25PM -0300, Eduardo Habkost wrote:
> The only purpose of scripts/qmp/qmp was the ability to run QMP
> commands non-interactively. Now it is possible to run qmp-shell
> non-interactively by providing a QMP command a command-line
> argument, making scripts/qmp/qmp obsolete.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> scripts/qmp/qmp | 126 --------------------------------------------------------
> 1 file changed, 126 deletions(-)
> delete mode 100755 scripts/qmp/qmp
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module
2017-08-08 10:07 ` Stefan Hajnoczi
2017-08-08 10:11 ` Daniel P. Berrange
@ 2017-08-08 12:57 ` Eduardo Habkost
1 sibling, 0 replies; 17+ messages in thread
From: Eduardo Habkost @ 2017-08-08 12:57 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: qemu-devel, armbru, Daniel P. Berrange
On Tue, Aug 08, 2017 at 11:07:21AM +0100, Stefan Hajnoczi wrote:
> On Fri, Aug 04, 2017 at 06:36:21PM -0300, Eduardo Habkost wrote:
> > It makes command-line parsing and generation of help text much
> > simpler.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > scripts/qmp/qmp-shell | 61 +++++++++++++++++----------------------------------
> > 1 file changed, 20 insertions(+), 41 deletions(-)
>
> The minimum Python version is 2.6. The argparse module was introduced
> in Python 2.7 so we cannot use it without increasing the minimum Python
> version:
>
> https://docs.python.org/2.6/modindex.html
>
> I suggest holding off on this for now.
2.6 is the minimum Python version for what, exactly? Is it for
building QEMU?
Note that qmp-shell is a tool for developers, not required for
building or running QEMU. People who really want to run
qmp-shell on a python-2.6 system can still install argparse if
they want to use qmp-shell.
I could backport the code to optparse. But should we add code
that relies on a deprecated module, if developers running Python
2.6 can install argparse?
--
Eduardo
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2017-08-08 12:57 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-04 21:36 [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Eduardo Habkost
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 1/5] qmp-shell: Use argparse module Eduardo Habkost
2017-08-08 10:07 ` Stefan Hajnoczi
2017-08-08 10:11 ` Daniel P. Berrange
2017-08-08 12:57 ` Eduardo Habkost
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 2/5] qmp-shell: Pass split cmdargs to __build_cmd() Eduardo Habkost
2017-08-08 10:09 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 3/5] qmp-shell: execute_cmdargs() method Eduardo Habkost
2017-08-08 10:09 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 4/5] qmp-shell: Accept QMP command as argument Eduardo Habkost
2017-08-08 10:11 ` Stefan Hajnoczi
2017-08-04 21:36 ` [Qemu-devel] [PATCH for-2.11 5/5] Remove scripts/qmp/qmp Eduardo Habkost
2017-08-08 10:11 ` Stefan Hajnoczi
2017-08-05 14:56 ` [Qemu-devel] [PATCH for-2.11 0/5] qmp-shell non-interactive mode, delete scripts/qmp/qmp Fam Zheng
2017-08-05 19:11 ` Eduardo Habkost
2017-08-07 2:26 ` Fam Zheng
2017-08-07 22:20 ` John Snow
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.