избегать ввода, встроенного для чтения стандартного ввода перед его выполнением - PullRequest
0 голосов
/ 13 июня 2018

Я обнаружил, что встроенный ввод захватывает все, что есть в stdin, еще до того, как выполнить его.Например:

import time

for n in range(5):
    time.sleep(1)
    # write now something, during the loop

example = input('input something: ')
print("you have written {}".format(example))

Попытка сброса stdin модулем sys перед вводом захвата не работает, потому что, например, если вы нажмете «ENTER», это все равно будет записано:

import time, sys

for n in range(5):
    time.sleep(1)
    # write now something, during the loop

sys.stdin.flush()
example = input('input something: ')
print("you have written {}".format(example))

Как мне избежать такого поведения и начать захватывать стандартный ввод только при выполнении оператора "input"?

1 Ответ

0 голосов
/ 13 июня 2018

Одним из способов является модуль termios (только POSIX):

import time, termios, sys

for n in range(5):
    time.sleep(1)
    # write now something, during the loop

termios.tcflush(sys.stdin, termios.TCIOFLUSH)
example = input('input something: ')
print("you have written {}".format(example))
...