LINUX.ORG.RU

Python - ассинхронный ввод / вывод, как реализовать?

 


2

3

Есть задача: в консоль выводится текст и одновременно пользователь может вводить данные. Если пойти самым простым путём, т.е. выводить из параллельного процесса, то введённый текст уплывает и редактирование становится неудобным. В Java такое можно сделать через jline (сам не пробовал), а как в Python? curses не предлагать, там Textbox не понимает русский.

★★★★★

Последнее исправление: InterVi (всего исправлений: 1)

Через тайловый менеджер / библиотеку для работы с тайловыми менеджерами. Тут дело не в асинхронности, а в комплексности задачи, её проще разбить на «сервер» и «клиент» и оба запускать в разных «окнах» - «тайлах».

menangen ★★★★★
()

В python не особо, но может есть местный аналог сишного select, poll? Перевести stdin, stdout в неблокирующий режим, ждать готовности к чтению и записи соответственно. Готов stdin - читать ввод, stdout - писать вывод. Курсес под капотом так и устроены.

anonymous
()
Ответ на: комментарий от anonymous

В python не особо, но может есть местный аналог сишного select, poll?

Есть модули selectors и select, там это и есть. Но, по-моему, от select до полноценного решения проблемы уплывания текста долгий и извилистый путь.

Проще, наверное, решить вопрос с curses. Согласно документации, модуль curses должен уметь работать с Юникодом.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от proud_anon

Умеет, но на русской раскладке в Textbox ничего нельзя ввести.

InterVi ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Именно текст убегает, новый вывод в консоль смещает его, получается каша.

InterVi ★★★★★
() автор топика

В python2 я сделал вот так, у меня не очень удобно вышло, так как редактировать ввод нельзя.

Rupricht ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.