如何用击键终止while循环?

2024-05-23 14:29:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读取串行数据并使用while循环写入csv文件。我希望用户在感觉收集到足够的数据后能够终止while循环。

while True:
    #do a bunch of serial stuff

    #if the user presses the 'esc' or 'return' key:
        break

我已经使用opencv做了类似的事情,但是它似乎在这个应用程序中不起作用(而且我真的不想只为这个函数导入opencv)。。。

        # Listen for ESC or ENTER key
        c = cv.WaitKey(7) % 0x100
        if c == 27 or c == 10:
            break

所以。如何让用户脱离循环?

另外,我不想使用键盘中断,因为脚本需要在while循环终止后继续运行。


Tags: or文件csvthe数据key用户true
3条回答

最简单的方法就是用通常的Ctrl-C(SIGINT)来中断它。

try:
    while True:
        do_something()
except KeyboardInterrupt:
    pass

由于Ctrl-C导致KeyboardInterrupt被提升,只需在循环外捕获它并忽略它。

有一种解决方案不需要非标准模块,并且100%可移植

import thread

def input_thread(a_list):
    raw_input()
    a_list.append(True)

def do_stuff():
    a_list = []
    thread.start_new_thread(input_thread, (a_list,))
    while not a_list:
        stuff()

以下代码对我有效。它需要openCV(导入cv2)。

代码由一个无限循环组成,该循环不断地寻找按下的键。在这种情况下,当按下“q”键时,程序结束。可以按其他键(在本例中为“b”或“k”)来执行不同的操作,例如更改变量值或执行函数。

import cv2

while True:
    k = cv2.waitKey(1) & 0xFF
    # press 'q' to exit
    if k == ord('q'):
        break
    elif k == ord('b'):
        # change a variable / do something ...
    elif k == ord('k'):
        # change a variable / do something ...

相关问题 更多 >