在python中,我正在运行一种不确定的循环,其中进程在预定义的时间内休眠 然后它弹出询问输入。这是我正在尝试的伪代码
while(1):
time.sleep(3600) //wait for one hour
pop_up_and_ask_for_input
虽然我能够做到以上几点,但我还想要一个额外的要求,无论何时作为用户我想中断并自己提供输入。程序应该接受输入并从中断处继续。请帮我做后面的部分
答案 0 :(得分:1)
首先导入您的模块,作为Python中的最佳实践:
import time
import sys
您需要一个捕获输入的数据结构,我将使用一个列表:
inputs = []
在Python 2中,使用raw_input比使用输入更好
if sys.version_info[0] == 2:
input = raw_input
并考虑可重复使用的代码,因此您不必编写两次:
def user_input():
user_in = input('\nplease give your input (Ctrl+C to break): ') # pop_up_and_ask_for_input
if user_in:
inputs.append(user_in)
要捕获键盘中断( Ctrl + C ),将循环置于try except块中并在那里执行输入捕获功能。
while True:
try:
time.sleep(3600) # wait for one hour
user_input()
except KeyboardInterrupt: # stop and get input now
try:
user_input()
except KeyboardInterrupt: # graciously leave loop if another interrupt
break
在交互式会话中如何工作:
^C
please give your input (Ctrl+C to break): foo
^C
please give your input (Ctrl+C to break): bar
^C
please give your input (Ctrl+C to break): >>>
>>> print(inputs)
['foo', 'bar']
答案 1 :(得分:1)
Aaron的答案有一个问题,即如果用户响应输入提示击中Control-C,则再次要求她输入。这个版本在这些条件下立即终止循环,如果还没有提示,则简单地终止睡眠。
import time
while True:
try:
time.sleep(3600)
except KeyboardInterrupt:
print # print newline to get back to col 1
try:
in_string = raw_input("Enter hourly input:")
# process the input
except KeyboardInterrupt: # graciously leave the loop if another interrupt
break