我编辑了我的问题,因为现在当我在Pycharm(在Powershell中)之外运行代码时,键盘中断可以正常工作,但现在我正努力在按Escape键时终止代码。
Mon Jul 23 14:33:48 2018
答案 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()