Не читать ранее введенные данные из sys.stdin - PullRequest
0 голосов
/ 02 апреля 2019

Скажем, вы хотите спросить пользователя о терминале в конце вашей программы. Однако во время выполнения программы пользователь нажал клавишу ввода.

import sys
import click
import time
print("Hit enter now to see this 'problem'")
time.sleep(1)
# Hit enter now while the program sleeps!
a=input("Do you want to delete something that is really bad to delete? [Y|n]")
if a.lower()!="n":
    print("\nNO! YOU DELETED IT!")

Конечно, глупо удалять вещи с ответом по умолчанию, а я этого не делаю. Тем не менее, раздражает, что я, пользователь, иногда нажимаю клавишу ввода, и по умолчанию это то, что идет.

Я на самом деле , используя , нажмите , чтобы прочитать ввод. Так что я бы хотел превентивную команду до того, как щелчок будет выполнен;

import sys
import click
import time
print("Hit enter now to see this 'problem'")
time.sleep(1)
# Hit enter now while the program sleeps!
# Clear stdin here somehow.
sys.stdin.flush() # <- doesn't work though 
a=input("Do you want to delete something that is really bad to delete? [Y|n]")
if a.lower()!="n":
    print("\nNO! YOU DELETED IT!")

Я работаю в Linux (Ubuntu 16.04 и Mac OS).

Есть идеи?

1 Ответ

2 голосов
/ 02 апреля 2019

Оказывается, мне нужно termios.tcflush() и termios.TCIFLUSH, что делает именно то, что спрашивают:

import sys
from termios import tcflush, TCIFLUSH
import click
import time
print("Hit enter now to see this 'problem'")
time.sleep(1)# Hit enter while it sleeps!
tcflush(sys.stdin, TCIFLUSH)
# Discards queued data on file descriptor 'stdin'.
# TCIFLUSH specifies that it's only the input queue.
# Use TCIOFLUSH if you also want to discard output queue.

a=input("Do you want to delete something that is really bad to delete? [Y|n]")
if a.lower()!="n":
    print("\nNO! YOU DELETED IT!")
else:
    print("Phew. It's not deleted!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...