Das Problem ist, dass ich die While-Schleife nicht beenden kann, ohne das gesamte Programm zu stoppen.Python Wie kann ich eine unendliche While-Schleife stoppen und mit dem restlichen Code fortfahren?
Wenn ich den Code auf meinem Raspberry Pi ausführe, startet die Kamera die Aufnahme, aber wenn ich das Video beenden und Strg + C drücken möchte, stoppt das gesamte Programm statt nach der while-Schleife fortzusetzen. Ich dachte, der Signal-Handler würde den Tastatur-Interrupt auffangen, tut es aber nicht.
Mein Code:
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.")
Was ich versucht:
bflag = True
while bflag ==True:
sleep(0.5)
print("still recording")
if interrupted:
print("Ctrl+C pressed")
camera.stop_recording()
bflag = False
Fehler:
[email protected]:~/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
Ersetzen Sie die "while True" mit while somevar, und ändern Sie diese Variable auf False, wenn Sie die Schleife beenden möchten – Tamar
Es gibt keine Notwendigkeit für Dinge wie "Disclaimer: Absolute noob versucht, eine Frage zu erklären.". Es liegt an dir, eine richtige Frage zu stellen, unabhängig von deinem Status, und vertraue mir, wenn ich sage, dass Noobishness zeigen wird, ob es da ist. Entschuldige dich nicht dafür, nimm dir einfach die Zeit, zuzuhören und zu lernen. –