On Mon, Jan 20, 2020 at 09:55:54AM +0000, Stefan Hajnoczi wrote:
> On Thu, Jan 16, 2020 at 12:03:14PM +0100, Kashyap Chamarthy wrote:
[...]
> > I'm reasonably happy with it (particularly the persistent history
> > captured in ~/.qmp-shell_history), and it has some "known issues" that
> > can trip up a new user. The one that immediately jumps to mind:
> > asynchronous events won't be printed without a prompt from the user --
> > e.g. after a `blockdev-commit`, you won't see BLOCK_JOB_{READY,
> > COMPLETED} events printed unless you manually hit enter from the
> > 'qmp-shell'.
[...]
> John and I discussed async events in the past. qmp-shell currently uses
> the input() built-in function. If we modify it with a
> select(2)/poll(2)-style function that monitors both stdin and the QMP
> socket then it could print QMP events as soon as they are received.
>
> There might be a nicer way of doing it, but pseudo-code for the idea is:
>
> def input_with_events(prompt):
> while True:
> print(prompt, end='', flush=True)
> readable_files = select([sys.stdin, qmp_socket])
> if qmp_socket in readable_files:
> print_qmp_events()
>
> # stdin is ready, read a line
> return input()
Thanks for the suggestion. The Python 'select' module[1] indeed seems
to provide access to select() and poll() Linux system calls.
[1] https://docs.python.org/3/library/select.html
--
/kashyap