2017-06-14 6 views
2

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 
+0

Ersetzen Sie die "while True" mit while somevar, und ändern Sie diese Variable auf False, wenn Sie die Schleife beenden möchten – Tamar

+2

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. –

Antwort

4

Dies würde es tun:

while True: 
    try: 
     sleep(0.5) 
     print("still recording") 
    except KeyboardInterrupt: 
     print("Ctrl+C pressed") 
     camera.stop_recording() 
     break 
+0

Vielen Dank. Wenn ich jedoch Ihre Lösung implementiere, tut ctrl + c nichts. Die While-Schleife läuft weiter. – Pytrik

+0

Sie benötigen diesen Code * anstelle * des Signal-Handler-Zeugs. – mdurant

+0

Wenn ich diesen Code stattdessen verwende, bekomme ich den Fehler in der Problembeschreibung erwähnt. – Pytrik

-1

enter image description here

Wie Sie sehen können, funktioniert es perfekt mit dem @ mdurant-Code.

+0

Wenn ich dies versuche, gibt es einen Fehler, den ich der Fragebeschreibung hinzugefügt habe. – Pytrik

+0

Der von @mdurant zur Verfügung gestellte Code funktioniert perfekt für mich, versuchen Sie es erneut und sehen Sie, dass Ihr Einzug richtig ist. –

+0

Definitiv nicht funktioniert. – Pytrik

Verwandte Themen