summaryrefslogtreecommitdiff
path: root/QMP/qmp-shell
blob: a5b72d15d1808c8764b11cc93c02992626ecad7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/python
#
# Simple QEMU shell on top of QMP
#
# Copyright (C) 2009 Red Hat Inc.
#
# Authors:
#  Luiz Capitulino <lcapitulino@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2.  See
# the COPYING file in the top-level directory.
#
# Usage:
#
# Start QEMU with:
#
# $ qemu [...] -monitor control,unix:./qmp,server
#
# Run the shell:
#
# $ qmp-shell ./qmp
#
# Commands have the following format:
#
# < command-name > [ arg-name1=arg1 ] ... [ arg-nameN=argN ]
#
# For example:
#
# (QEMU) info item=network

import qmp
import readline
from sys import argv,exit

def shell_help():
    print 'bye  exit from the shell'

def main():
    if len(argv) != 2:
        print 'qemu-shell <unix-socket>'
        exit(1)

    qemu = qmp.QEMUMonitorProtocol(argv[1])
    qemu.connect()
    qemu.send("qmp_capabilities")

    print 'Connected!'

    while True:
        try:
            cmd = raw_input('(QEMU) ')
        except EOFError:
            print
            break
        if cmd == '':
            continue
        elif cmd == 'bye':
            break
        elif cmd == 'help':
            shell_help()
        else:
            try:
                resp = qemu.send(cmd)
                if resp == None:
                    print 'Disconnected'
                    break
                print resp
            except IndexError:
                print '-> command format: <command-name> ',
                print '[arg-name1=arg1] ... [arg-nameN=argN]'

if __name__ == '__main__':
    main()