Statistics
| Branch: | Revision:

root / QMP / qmp-shell @ 1d2699ae

History | View | Annotate | Download (1.5 kB)

1 cedebdac Luiz Capitulino
#!/usr/bin/python
2 cedebdac Luiz Capitulino
#
3 cedebdac Luiz Capitulino
# Simple QEMU shell on top of QMP
4 cedebdac Luiz Capitulino
#
5 cedebdac Luiz Capitulino
# Copyright (C) 2009 Red Hat Inc.
6 cedebdac Luiz Capitulino
#
7 cedebdac Luiz Capitulino
# Authors:
8 cedebdac Luiz Capitulino
#  Luiz Capitulino <lcapitulino@redhat.com>
9 cedebdac Luiz Capitulino
#
10 cedebdac Luiz Capitulino
# This work is licensed under the terms of the GNU GPL, version 2.  See
11 cedebdac Luiz Capitulino
# the COPYING file in the top-level directory.
12 cedebdac Luiz Capitulino
#
13 cedebdac Luiz Capitulino
# Usage:
14 cedebdac Luiz Capitulino
#
15 cedebdac Luiz Capitulino
# Start QEMU with:
16 cedebdac Luiz Capitulino
#
17 cedebdac Luiz Capitulino
# $ qemu [...] -monitor control,unix:./qmp,server
18 cedebdac Luiz Capitulino
#
19 cedebdac Luiz Capitulino
# Run the shell:
20 cedebdac Luiz Capitulino
#
21 cedebdac Luiz Capitulino
# $ qmp-shell ./qmp
22 cedebdac Luiz Capitulino
#
23 cedebdac Luiz Capitulino
# Commands have the following format:
24 cedebdac Luiz Capitulino
#
25 cedebdac Luiz Capitulino
# < command-name > [ arg-name1=arg1 ] ... [ arg-nameN=argN ]
26 cedebdac Luiz Capitulino
#
27 cedebdac Luiz Capitulino
# For example:
28 cedebdac Luiz Capitulino
#
29 cedebdac Luiz Capitulino
# (QEMU) info item=network
30 cedebdac Luiz Capitulino
31 cedebdac Luiz Capitulino
import qmp
32 cedebdac Luiz Capitulino
import readline
33 cedebdac Luiz Capitulino
from sys import argv,exit
34 cedebdac Luiz Capitulino
35 cedebdac Luiz Capitulino
def shell_help():
36 cedebdac Luiz Capitulino
    print 'bye  exit from the shell'
37 cedebdac Luiz Capitulino
38 cedebdac Luiz Capitulino
def main():
39 cedebdac Luiz Capitulino
    if len(argv) != 2:
40 cedebdac Luiz Capitulino
        print 'qemu-shell <unix-socket>'
41 cedebdac Luiz Capitulino
        exit(1)
42 cedebdac Luiz Capitulino
43 cedebdac Luiz Capitulino
    qemu = qmp.QEMUMonitorProtocol(argv[1])
44 cedebdac Luiz Capitulino
    qemu.connect()
45 cedebdac Luiz Capitulino
46 cedebdac Luiz Capitulino
    print 'Connected!'
47 cedebdac Luiz Capitulino
48 cedebdac Luiz Capitulino
    while True:
49 cedebdac Luiz Capitulino
        try:
50 cedebdac Luiz Capitulino
            cmd = raw_input('(QEMU) ')
51 cedebdac Luiz Capitulino
        except EOFError:
52 cedebdac Luiz Capitulino
            print
53 cedebdac Luiz Capitulino
            break
54 cedebdac Luiz Capitulino
        if cmd == '':
55 cedebdac Luiz Capitulino
            continue
56 cedebdac Luiz Capitulino
        elif cmd == 'bye':
57 cedebdac Luiz Capitulino
            break
58 cedebdac Luiz Capitulino
        elif cmd == 'help':
59 cedebdac Luiz Capitulino
            shell_help()
60 cedebdac Luiz Capitulino
        else:
61 cedebdac Luiz Capitulino
            try:
62 cedebdac Luiz Capitulino
                resp = qemu.send(cmd)
63 cedebdac Luiz Capitulino
                if resp == None:
64 cedebdac Luiz Capitulino
                    print 'Disconnected'
65 cedebdac Luiz Capitulino
                    break
66 cedebdac Luiz Capitulino
                print resp
67 cedebdac Luiz Capitulino
            except IndexError:
68 cedebdac Luiz Capitulino
                print '-> command format: <command-name> ',
69 cedebdac Luiz Capitulino
                print '[arg-name1=arg1] ... [arg-nameN=argN]'
70 cedebdac Luiz Capitulino
71 cedebdac Luiz Capitulino
if __name__ == '__main__':
72 cedebdac Luiz Capitulino
    main()