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 | |
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() |