]>
Commit | Line | Data |
---|---|---|
cedebdac LC |
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 <[email protected]> | |
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() | |
8d7e8457 | 45 | qemu.send("qmp_capabilities") |
cedebdac LC |
46 | |
47 | print 'Connected!' | |
48 | ||
49 | while True: | |
50 | try: | |
51 | cmd = raw_input('(QEMU) ') | |
52 | except EOFError: | |
53 | ||
54 | break | |
55 | if cmd == '': | |
56 | continue | |
57 | elif cmd == 'bye': | |
58 | break | |
59 | elif cmd == 'help': | |
60 | shell_help() | |
61 | else: | |
62 | try: | |
63 | resp = qemu.send(cmd) | |
64 | if resp == None: | |
65 | print 'Disconnected' | |
66 | break | |
67 | print resp | |
68 | except IndexError: | |
69 | print '-> command format: <command-name> ', | |
70 | print '[arg-name1=arg1] ... [arg-nameN=argN]' | |
71 | ||
72 | if __name__ == '__main__': | |
73 | main() |