在不停止程序的情况下输入
Input without stopping program
我正在尝试制作一个打印剩余时间的倒数计时器,当您输入内容时,它会打印您输入的内容。我的问题是我不想等待输入,只是保持 运行 计时器。我的错误代码:
timer = 100
while True:
print(timer)
timer -= 1
if input('> '):
print('the output of input')
你可以说我想让计时器在后台打印时间。
这里有一个函数,如果没有给出输入就会超时:
import select
import sys
def timeout_input(timeout, prompt="", timeout_value=None):
sys.stdout.write(prompt)
sys.stdout.flush()
ready, _, _ = select.select([sys.stdin], [], [], timeout)
if ready:
return sys.stdin.readline().rstrip('\n')
else:
sys.stdout.write('\n')
sys.stdout.flush()
return timeout_value
您可以轻松修改它,通过将 select.select
上的超时值更改为 1
并循环 timeout
次,使其显示剩余时间。
标准输入和标准输出(通过 input()
和 print()
访问)不是编写交互式异步用户界面 (UI) 的好选择。 Python 通过它的标准库支持一些 UI。例如,curses 是许多 POSIX 系统上可用的基于文本的用户界面。这是一个在接受用户数字时显示倒数计时器的示例代码:
import time
import curses
def get_number(seconds):
def _get_number(stdscr):
stdscr.clear()
timeout = time.time() + seconds
s = ""
while time.time() <= timeout:
time_left = int(timeout - time.time())
stdscr.addstr(0, 0, 'Countdown: {} {}'.format(time_left,
"*" * time_left + " " * seconds))
stdscr.addstr(2, 0, ' ' * 50)
stdscr.addstr(2, 0, 'Your Input: {}'.format(s))
stdscr.refresh()
stdscr.timeout(100)
code = stdscr.getch()
stdscr.addstr(10, 0, 'Code: {}'.format(code)) # for debug only
stdscr.refresh()
if ord("0") <= code <= ord("9"):
s += chr(code)
continue
if code == 10 and s: # newline
return int(s)
if code == 127: # backspace
s = s[:-1]
return curses.wrapper(_get_number)
print(get_number(10))
我正在尝试制作一个打印剩余时间的倒数计时器,当您输入内容时,它会打印您输入的内容。我的问题是我不想等待输入,只是保持 运行 计时器。我的错误代码:
timer = 100
while True:
print(timer)
timer -= 1
if input('> '):
print('the output of input')
你可以说我想让计时器在后台打印时间。
这里有一个函数,如果没有给出输入就会超时:
import select
import sys
def timeout_input(timeout, prompt="", timeout_value=None):
sys.stdout.write(prompt)
sys.stdout.flush()
ready, _, _ = select.select([sys.stdin], [], [], timeout)
if ready:
return sys.stdin.readline().rstrip('\n')
else:
sys.stdout.write('\n')
sys.stdout.flush()
return timeout_value
您可以轻松修改它,通过将 select.select
上的超时值更改为 1
并循环 timeout
次,使其显示剩余时间。
标准输入和标准输出(通过 input()
和 print()
访问)不是编写交互式异步用户界面 (UI) 的好选择。 Python 通过它的标准库支持一些 UI。例如,curses 是许多 POSIX 系统上可用的基于文本的用户界面。这是一个在接受用户数字时显示倒数计时器的示例代码:
import time
import curses
def get_number(seconds):
def _get_number(stdscr):
stdscr.clear()
timeout = time.time() + seconds
s = ""
while time.time() <= timeout:
time_left = int(timeout - time.time())
stdscr.addstr(0, 0, 'Countdown: {} {}'.format(time_left,
"*" * time_left + " " * seconds))
stdscr.addstr(2, 0, ' ' * 50)
stdscr.addstr(2, 0, 'Your Input: {}'.format(s))
stdscr.refresh()
stdscr.timeout(100)
code = stdscr.getch()
stdscr.addstr(10, 0, 'Code: {}'.format(code)) # for debug only
stdscr.refresh()
if ord("0") <= code <= ord("9"):
s += chr(code)
continue
if code == 10 and s: # newline
return int(s)
if code == 127: # backspace
s = s[:-1]
return curses.wrapper(_get_number)
print(get_number(10))