У меня есть неблокирующее чтение из sys.stdin
с использованием select
, которое чередует обработчики для моего сокета и ввода пользователя:
while True:
input_ready, _, _ = select.select([my_socket, sys.stdin], [], [])
for sender in input_ready:
if sender == sys.stdin:
process_user_input()
elif sender == my_socket:
process_socket_reply()
в process_user_input()
У меня есть:
command = input()
для получения и обработки пользовательского ввода.
Я хочу показать подсказку, чтобы дать пользователям вид, подобный терминалу;точно так же, как при использовании input('> ')
в блокирующем вводе стандартного ввода мы можем достичь.
Но, если я использую input('> ')
в моем process_user_input()
, >
будет напечатано после того, как пользователь введет свою команду (какожидается!)
some_command
> Invalid command.
Как я могу это сделать?
ПРИМЕЧАНИЕ : поскольку в моем коде происходят другие события, в stdout могут быть некоторые отпечатки (таким образом, print('> ', end='')
потерпит неудачу).Поэтому я хочу, чтобы мой >
присутствовал всякий раз, когда я жду ввода, даже после нескольких отпечатков в терминале.