【问题标题】:Linux : python : clear input buffer before raw_input()Linux:python:在 raw_input() 之前清除输入缓冲区
【发布时间】:2014-10-24 19:37:29
【问题描述】:

我已经查看了一些关于此的主题,但它似乎并没有解决我的问题。 我正在运行 linux,当我使用 raw_input() 时,每个之间都有一个暂停,它将获取我之前按下的数据,这是一个示例:

 import time
 a = raw_input("first input")
 b = raw_input("second input")
 time.sleep(5)
 #flush junk?
 a = raw_input("third input")
 b = raw_input("fourth input")

如果我在 5 秒内按下任意键,然后按 enter,其他两个原始输入将采用输入。我希望能够刷新数据并提示用户。

谢谢。

【问题讨论】:

    标签: python linux buffer


    【解决方案1】:

    对于 unix,你可以使用termios.tcflush

    from termios import tcflush, TCIFLUSH
    import time,sys
    
    a = raw_input("first input ")
    b = raw_input("second input ")
    
    time.sleep(5)
    tcflush(sys.stdin, TCIFLUSH)
    
    a = raw_input("third input ")
    b = raw_input("fourth input ")
    
    ~$ python foo.py 
    first input 1
    second input 2
    33
    33
    third input 3
    fourth input 4
    

    termios.tcflush(fd, queue)

    丢弃文件描述符 fd 上的排队数据。队列选择器指定哪个队列:TCIFLUSH 用于输入队列,TCOFLUSH 用于输出队列,或 TCIOFLUSH 用于两个队列。

    【讨论】:

      【解决方案2】:

      使用 tty (linux) 和 msvcrt (windows) 的 keypress getch 类并使用 sys.stdout.flush() 函数刷新缓冲区

      【讨论】:

      • tty 在 python2.7 上似乎没有这个类。我在 ubuntu 14.04
      • 对于 tty 是 termios 类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多