Annotation of qemu/QMP/qmp, revision 1.1.1.1

1.1       root        1: #!/usr/bin/python
                      2: #
                      3: # QMP command line tool
                      4: #
                      5: # Copyright IBM, Corp. 2011
                      6: #
                      7: # Authors:
                      8: #  Anthony Liguori <[email protected]>
                      9: #
                     10: # This work is licensed under the terms of the GNU GPLv2 or later.
                     11: # See the COPYING file in the top-level directory.
                     12: 
                     13: import sys, os
                     14: from qmp import QEMUMonitorProtocol
                     15: 
                     16: def print_response(rsp, prefix=[]):
                     17:     if type(rsp) == list:
                     18:         i = 0
                     19:         for item in rsp:
                     20:             if prefix == []:
                     21:                 prefix = ['item']
                     22:             print_response(item, prefix[:-1] + ['%s[%d]' % (prefix[-1], i)])
                     23:             i += 1
                     24:     elif type(rsp) == dict:
                     25:         for key in rsp.keys():
                     26:             print_response(rsp[key], prefix + [key])
                     27:     else:
                     28:         if len(prefix):
                     29:             print '%s: %s' % ('.'.join(prefix), rsp)
                     30:         else:
                     31:             print '%s' % (rsp)
                     32: 
                     33: def main(args):
                     34:     path = None
                     35: 
                     36:     # Use QMP_PATH if it's set
                     37:     if os.environ.has_key('QMP_PATH'):
                     38:         path = os.environ['QMP_PATH']
                     39: 
                     40:     while len(args):
                     41:         arg = args[0]
                     42: 
                     43:         if arg.startswith('--'):
                     44:             arg = arg[2:]
                     45:             if arg.find('=') == -1:
                     46:                 value = True
                     47:             else:
                     48:                 arg, value = arg.split('=', 1)
                     49: 
                     50:             if arg in ['path']:
                     51:                 if type(value) == str:
                     52:                     path = value
                     53:             elif arg in ['help']:
                     54:                 os.execlp('man', 'man', 'qmp')
                     55:             else:
                     56:                 print 'Unknown argument "%s"' % arg
                     57: 
                     58:             args = args[1:]
                     59:         else:
                     60:             break
                     61: 
                     62:     if not path:
                     63:         print "QMP path isn't set, use --path=qmp-monitor-address or set QMP_PATH"
                     64:         return 1
                     65: 
                     66:     if len(args):
                     67:         command, args = args[0], args[1:]
                     68:     else:
                     69:         print 'No command found'
                     70:         print 'Usage: "qmp [--path=qmp-monitor-address] qmp-cmd arguments"'
                     71:         return 1
                     72: 
                     73:     if command in ['help']:
                     74:         os.execlp('man', 'man', 'qmp')
                     75: 
                     76:     srv = QEMUMonitorProtocol(path)
                     77:     srv.connect()
                     78: 
                     79:     def do_command(srv, cmd, **kwds):
                     80:         rsp = srv.cmd(cmd, kwds)
                     81:         if rsp.has_key('error'):
                     82:             raise Exception(rsp['error']['desc'])
                     83:         return rsp['return']
                     84: 
                     85:     commands = map(lambda x: x['name'], do_command(srv, 'query-commands'))
                     86: 
                     87:     srv.close()
                     88: 
                     89:     if command not in commands:
                     90:         fullcmd = 'qmp-%s' % command
                     91:         try:
                     92:             os.environ['QMP_PATH'] = path
                     93:             os.execvp(fullcmd, [fullcmd] + args)
                     94:         except OSError, (errno, msg):
                     95:             if errno == 2:
                     96:                 print 'Command "%s" not found.' % (fullcmd)
                     97:                 return 1
                     98:             raise
                     99:         return 0
                    100: 
                    101:     srv = QEMUMonitorProtocol(path)
                    102:     srv.connect()
                    103: 
                    104:     arguments = {}
                    105:     for arg in args:
                    106:         if not arg.startswith('--'):
                    107:             print 'Unknown argument "%s"' % arg
                    108:             return 1
                    109: 
                    110:         arg = arg[2:]
                    111:         if arg.find('=') == -1:
                    112:             value = True
                    113:         else:
                    114:             arg, value = arg.split('=', 1)
                    115: 
                    116:         if arg in ['help']:
                    117:             os.execlp('man', 'man', 'qmp-%s' % command)
                    118:             return 1
                    119: 
                    120:         arguments[arg] = value
                    121: 
                    122:     rsp = do_command(srv, command, **arguments)
                    123:     print_response(rsp)
                    124: 
                    125: if __name__ == '__main__':
                    126:     sys.exit(main(sys.argv[1:]))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.