用户定义的中断

时间:2014-03-02 04:47:24

标签: python

在python中,我正在运行一种不确定的循环,其中进程在预定义的时间内休眠 然后它弹出询问输入。这是我正在尝试的伪代码

while(1):
  time.sleep(3600) //wait for one hour


  pop_up_and_ask_for_input

虽然我能够做到以上几点,但我还想要一个额外的要求,无论何时作为用户我想中断并自己提供输入。程序应该接受输入并从中断处继续。请帮我做后面的部分

2 个答案:

答案 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