mirror of https://github.com/proxmox/mirror_qemu
QMP: add get_events(wait=True) option
The get_events() function polls for new QMP events and then returns. It can be useful to wait for the next QMP event so add the boolean 'wait' keyword argument. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>master
parent
e9b4b432e7
commit
91b8eddf41
11
QMP/qmp.py
11
QMP/qmp.py
|
@ -43,7 +43,7 @@ class QEMUMonitorProtocol:
|
||||||
family = socket.AF_UNIX
|
family = socket.AF_UNIX
|
||||||
return socket.socket(family, socket.SOCK_STREAM)
|
return socket.socket(family, socket.SOCK_STREAM)
|
||||||
|
|
||||||
def __json_read(self):
|
def __json_read(self, only_event=False):
|
||||||
while True:
|
while True:
|
||||||
data = self.__sockfile.readline()
|
data = self.__sockfile.readline()
|
||||||
if not data:
|
if not data:
|
||||||
|
@ -51,7 +51,8 @@ class QEMUMonitorProtocol:
|
||||||
resp = json.loads(data)
|
resp = json.loads(data)
|
||||||
if 'event' in resp:
|
if 'event' in resp:
|
||||||
self.__events.append(resp)
|
self.__events.append(resp)
|
||||||
continue
|
if not only_event:
|
||||||
|
continue
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
error = socket.error
|
error = socket.error
|
||||||
|
@ -106,9 +107,11 @@ class QEMUMonitorProtocol:
|
||||||
qmp_cmd['id'] = id
|
qmp_cmd['id'] = id
|
||||||
return self.cmd_obj(qmp_cmd)
|
return self.cmd_obj(qmp_cmd)
|
||||||
|
|
||||||
def get_events(self):
|
def get_events(self, wait=False):
|
||||||
"""
|
"""
|
||||||
Get a list of available QMP events.
|
Get a list of available QMP events.
|
||||||
|
|
||||||
|
@param wait: block until an event is available (bool)
|
||||||
"""
|
"""
|
||||||
self.__sock.setblocking(0)
|
self.__sock.setblocking(0)
|
||||||
try:
|
try:
|
||||||
|
@ -118,6 +121,8 @@ class QEMUMonitorProtocol:
|
||||||
# No data available
|
# No data available
|
||||||
pass
|
pass
|
||||||
self.__sock.setblocking(1)
|
self.__sock.setblocking(1)
|
||||||
|
if not self.__events and wait:
|
||||||
|
self.__json_read(only_event=True)
|
||||||
return self.__events
|
return self.__events
|
||||||
|
|
||||||
def clear_events(self):
|
def clear_events(self):
|
||||||
|
|
Loading…
Reference in New Issue