Как вы можете определить, есть ли в программе на Python что-либо для чтения со стандартного ввода? - PullRequest
3 голосов
/ 08 февраля 2011

Я пишу чат-программу на Python, которая должна подключиться к серверу, прежде чем пользовательский ввод из sys.stdin будет принят.Если соединение не может быть установлено, то программа завершает работу.

Запуск этого из оболочки, если сбой соединения и отправка ввода при попытке соединения, ввод выводится в оболочку после выхода из программы:

jtink@gab-dec:~$ python chat.py
attempting to connect...
Hey there!        # This is user input
How are you?      # This is more user input
connection failed
jtink@gab-dec:~$ Hey there!
Hey there!: command not found
jtink@gab-dev:~$ How are you?
How are you?: command not found
jtink@gab-dev:~$

Есть ли способ узнать, остался ли ввод в sys.stdin, чтобы я мог прочитать его до выхода из программы чата?

Я прочитал этот похожий вопрос, но ответы только описывают, как определить, передается ли входная информация в программу Python, а не как определить, есть ли ввод.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

Существует два основных решения этой проблемы:

  • При выходе из-за невозможности подключения к серверу прочитайте оставшиеся входные данные из stdin и отбросьте их.Это решает вашу непосредственную проблему сегодня, но решает только одну ситуацию.

  • (лучше) Настройте реальный цикл событий так, чтобы соединение с сервером происходило «в фоновом режиме», что означаетПрограмма все еще читает из стандартного ввода, в то же время пытается подключиться.Вы можете использовать это решение, если вам нужно сказать, переподключиться к серверу, если соединение по какой-то причине обрывается.

3 голосов
/ 08 февраля 2011

Я думаю, что вам нужно проверить этот SO вопрос о неблокирующем вводе / выводе в stdin Неблокирующее чтение для подпроцесса. ТРУБА в python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...