gpt4 book ai didi

python - 如何刷新输入流?

转载 作者:太空狗 更新时间:2023-10-29 17:40:09 26 4
gpt4 key购买 nike

我正在用 Python 编写一个简单的警报实用程序。

#!/usr/bin/python

import time
import subprocess
import sys

alarm1 = int(raw_input("How many minutes (alarm1)? "))

while (1):
time.sleep(60*alarm1)
print "Alarm1"
sys.stdout.flush()
doit = raw_input("Continue (Y/N)?[Y]: ")
print "Input",doit
if doit == 'N' or doit=='n':
print "Exiting....."
break

我想刷新或丢弃脚本休眠时输入的所有击键,只接受执行 raw_input() 后的击键。

我在 Windows XP 上运行它。

最佳答案

了解您使用的操作系统会有所帮助,因为这是一个非常特定于操作系统的问题。例如,Kylar 的答案在 Windows 上不起作用,因为 sys.stdin 没有 fileno 属性。

我很好奇并使用 curses 拼凑了一个解决方案,但这在 Windows 上也不起作用:

#!/usr/bin/python                                                               

import time
import sys
import curses

def alarmloop(stdscr):
stdscr.addstr("How many seconds (alarm1)? ")
curses.echo()
alarm1 = int(stdscr.getstr())
while (1):
time.sleep(alarm1)
curses.flushinp()
stdscr.clear()
stdscr.addstr("Alarm1\n")
stdscr.addstr("Continue (Y/N)?[Y]:")
doit = stdscr.getch()
stdscr.addstr("\n")
stdscr.addstr("Input "+chr(doit)+"\n")
stdscr.refresh()
if doit == ord('N') or doit == ord('n'):
stdscr.addstr("Exiting.....\n")
break

curses.wrapper(alarmloop)

编辑:啊,Windows。然后就可以使用msvcrt模块了。请注意,下面的代码并不完美,它在 IDLE 中根本不起作用:

#!/usr/bin/python

import time
import subprocess
import sys
import msvcrt

alarm1 = int(raw_input("How many seconds (alarm1)? "))

while (1):
time.sleep(alarm1)
print "Alarm1"
sys.stdout.flush()

# Try to flush the buffer
while msvcrt.kbhit():
msvcrt.getch()

print "Continue (Y/N)?[Y]"
doit = msvcrt.getch()
print "Input",doit
if doit == 'N' or doit=='n':
print "Exiting....."
break

关于python - 如何刷新输入流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2520893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com