如何在不使用"输入"的情况下检测输入在python?

时间:2014-11-07 10:08:47

标签: python input

我正在尝试通过使用while循环来增加时间来进行速度相机程序。我希望用户能够输入"输入"停止while循环,while循环暂停并等待用户输入内容,因此while循环用作时钟。

    import time
    timeTaken=float(0)
    while True:
        i = input   #this is where the user either choses to input "Enter"
                    #or to let the loop continue
        if not i:
        break
        time.sleep(0.01)
        timeTaken=timeTaken+0.01
    print(timeTaken)

我需要一行代码,可以检测用户是否输入了某些东西而不使用"输入"。

2 个答案:

答案 0 :(得分:1)

至少有两种方法可以解决这个问题。

首先要检查你的“标准输入”流是否有一些数据,没有阻塞实际等待直到有一些数据。评论中引用的答案告诉您如何处理此问题。然而,尽管这在简单性方面具有吸引力(与替代方案相比),但是无法在Windows和Linux之间透明地进行这种操作。

第二种方法是使用线程来阻止并等待用户输入:

import threading 
import time

no_input = True

def add_up_time():
    print "adding up time..."
    timeTaken=float(0)
    while no_input:
        time.sleep(0.01)
        timeTaken=timeTaken+0.01
    print(timeTaken)


# designed to be called as a thread
def signal_user_input():
    global no_input
    i = raw_input("hit enter to stop things")   # I have python 2.7, not 3.x
    no_input = False
    # thread exits here


# we're just going to wait for user input while adding up time once...
threading.Thread(target = signal_user_input).start()

add_up_time()

print("done.... we could set no_input back to True and loop back to the previous comment...")

正如您所看到的,关于如何从线程到主循环进行通信已经收到了输入,这有点两难。发信号的全局变量...... yucko嗯?

答案 1 :(得分:-2)

你应该使用一个帖子,如果你应该听取输入并且同时正在处理其他东西。