当前位置: 首页 > 知识库问答 >
问题:

python如何停止一个无限while循环并继续执行其余代码?

高修筠
2023-03-14

问题是,如果不停止整个程序,我就不能退出虽然循环。

当我在Raspberry Pi上执行代码时,相机开始录制,但当我想结束视频并按Ctrl c时,整个程序停止,而不是在while循环后继续。我以为信号处理器会捕捉到键盘中断,但它没有。

我的代码:

import picamera
import signal
from time import sleep
from subprocess import call

def signal_handler(signal, frame):
        global interrupted
        interrupted = True

signal.signal(signal.SIGINT, signal_handler)

interrupted = False

# Setup the camera
with picamera.PiCamera() as camera:
    camera.resolution = (1640, 922)
    camera.framerate = 30

    # Start recording
    camera.start_recording("pythonVideo.h264")

while True:
        sleep(0.5)
        print("still recording")

        if interrupted:
                print("Ctrl+C pressed")
                camera.stop_recording()
                break

# Stop recording
#camera.stop_recording()

# The camera is now closed.

print("We are going to convert the video.")
# Define the command we want to execute.
command = "MP4Box -add pythonVideo.h264 convertedVideo.mp4 -fps 30"
#Execute command.
call([command], shell=True)
# Video converted.
print("Video converted.")

我尝试的是:

bflag = True
while bflag ==True:
        sleep(0.5)
        print("still recording")

        if interrupted:
                print("Ctrl+C pressed")
                camera.stop_recording()
                bflag = False

错误:

pi@raspberrypi:~/Documents/useThisFolder $ python cookieVideo.py 
still recording
still recording
still recording
still recording
still recording
^Cstill recording
Ctrl+C pressed
Traceback (most recent call last):
  File "cookieVideo.py", line 29, in <module>
    camera.stop_recording()
  File "/usr/lib/python2.7/dist-packages/picamera/camera.py", line 1193, in stop_recording
'port %d' % splitter_port)
picamera.exc.PiCameraNotRecording: There is no recording in progress on port 1

共有2个答案

许涵容
2023-03-14

正如您所见,它与@mdurant的代码完美配合。

楚健
2023-03-14

这可以做到:

while True:
    try:
        sleep(0.5)
        print("still recording")
    except KeyboardInterrupt:
        print("Ctrl+C pressed")
        camera.stop_recording()
        break
 类似资料:
  • 不知道如何阻止这个while循环无限重复。我使用检查用户输入是否为int。如果没有输入int值,则循环将无限重复。

  • 我正在为Java的一个聊天应用程序做一个服务器。 while循环应该连接到新的客户端,但代码仍然重复连接到第一个客户端,甚至在它连接之后也是如此,从而导致绑定失败错误。我该换什么?

  • 我正在开发一个简单的python程序,其中包括创建一个圆圈“按钮”,然后让用户在圆圈内单击。如果他们没有点击圆圈,会出现一条消息,说明他们在圆圈外点击,应该再试一次。然而,在最后一部分,我得到了一个关于代码的无休止的循环,尽管使用了中断。是否有任何人可以帮助查看是否存在错误?谢谢

  • 我正在尝试做一个数字猜测游戏,如果用户匹配他们赢得现金的幸运数字,游戏将继续进行,直到他们用完现金。他们每打一轮都要付赌注。每一轮都会产生一个新的随机数。 我只想使用一个输入。当我把输入放在循环中,循环无限停止循环,当我把它放在循环外,它无限开始循环。我该怎么阻止这一切?我需要向while循环添加什么?我尝试突破,但我想继续比赛,直到钱用完。 我只想使用一个输入,但是当我把输入带出循环(lucky

  • 行,并且while循环保持无限运行。但现在代码做了我想做的,它停止并计算新用户输入的次数,只要输入错误(我在输入正确值之前输入了3、6、7个错误值,它每次都起作用)。 我的问题是,扫描器如何停止无限循环?扫描仪是否会导致计算机在继续操作之前等待用户输入,因此它会继续对其进行评估,而不是无限地打印出“对不起,这不是一个有效的输入...”?我只想确定我知道为什么它停止了。

  • 问题内容: 我有一个运行在无限循环上的脚本,并将其添加到数据库中,并且执行了一些我不能只停止一半的事情,所以我不能只按ctrl + C并停止它。 我希望能够以某种方式停止while循环,但是让它在停止之前完成最后一次迭代。 让我澄清一下: 我的代码看起来像这样: 我希望能够在结束或开始时中断while循环,但不要在执行操作之间中断,因为那样会很不好。 而且我不希望它在每次迭代后问我是否要继续。 感