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