通过转义键停止一会儿循环吗?

时间:2018-07-23 18:38:44

标签: python cv2

我编辑了我的问题,因为现在当我在Pycharm(在Powershell中)之外运行代码时,键盘中断可以正常工作,但现在我正努力在按Escape键时终止代码。

Mon Jul 23 14:33:48 2018

2 个答案:

答案 0 :(得分:0)

不幸的是,很难听到按键的声音,除非您希望循环的每次迭代一次,这对于您来说是不切实际的。我认为Joel的评论正确无误,您应该使用

Ctrl + C

并像这样捕获KeyboardInterrupt

from PIL import ImageGrab
import numpy as np
import cv2
import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)

def record_screen():

    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('ResultFile.avi', fourcc, 25.0, screensize)

    while True:
        try:
            img = ImageGrab.grab()
            img_np = np.array(img)
            frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
            out.write(frame)
            print('recording....')
        except KeyboardInterrupt:
            break

    out.release()
    cv2.destroyAllWindows()


record_screen()

通过这种方式,KeyboardInterrupt不会终止程序,它只会结束while循环,从而使您可以释放编写器并清理其余cv2资源。

因为您使用PyCharm作为IDE,所以 Ctrl + C 可能不适合您-请尝试 Ctrl + F2

答案 1 :(得分:0)

您应该创建一个名为running的变量!在while循环之前设置“ running = True”。而不是将while循环设为“ while True:”,而应使其变为“ while running = True:”。最后,在while循环中,如果您按ESC键,请设置“ running = False”

以下是pygame的示例:

import pygame
pygame.init()

def record():

    # init
    running = True

    while running == True:

        # record

        events = pygame.event.get()

        for event in events:

            if event.type == pygame.K_ESCAPE:

                running = False

    quit()

record()