2017-06-07 6 views
0

私は、ラズベリーパイhttps://www.raspberrypi.org/learning/parent-detector/worksheet/でモーション検知セキュリティカメラを構築しています。Python:キーを押したままループを閉じる

コードは正常に動作しますが、起動時にデバイスにPythonコードを実行させたいので、特定のキーを押したときにプログラムを終了します。現時点では、プログラムは動作しますが、ループから抜け出すことはできませんので、私はラズベリー・パイのデスクトップにアクセスできない(私の回避策は、デバイスをオフにして、手動でカメラを取り外し、デバイスをオンに戻してこのコードは、モニタ、キーボードなどに接続されたpiからプログラムを実行するように書かれています。私はちょうどそれをどこかに差し込み、カメラを腕にしたい。私は家に戻り(仕事、休暇など)、キーボードを差し込み、プログラムを終了して安全にシャットダウンし、モニターに接続するとセキュリティインシデントを見ることができるようにキーを押します。

スクリプトコード:

from gpiozero import MotionSensor 
from picamera import PiCamera 
from datetime import datetime 

camera = PiCamera() 
pir = MotionSensor(4) 
while True: 
    pir.wait_for_motion() 
    filename = datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264") 
    camera.start_recording(filename) 
    pir.wait_for_no_motion() 
    camera.stop_recording() 
+0

'if input()== '':break'? –

+0

@Shivaは動作しません、 'input'はブロックしています。 –

+0

ああ...それを得た。 'signal.signal'おそらく? –

答えて

0

あなたはスクリプトが実行されているコマンドラインウィンドウでCtrl + Cでプログラムの実行を停止することができます

あなたはまだいくつかの処理を行いたい場合は、。その後のようなtryブロックであなたのwhileループをラップ:

try: 
    while True: 
     pir.wait_for_motion() 
     filename = datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264") 
     camera.start_recording(filename) 
     pir.wait_for_no_motion() 
     camera.stop_recording() 
except KeyboardInterrupt: 
    pass 

# Continue your code here 

をあなたがプログラムを停止するキーを選択したい場合は(他の目Ctrl + Cキーを押す)、OSのどこからでもキーを押したときに停止するようにしたら、Keyboardライブラリの使用をお勧めします。

+0

これはうまくいった!ありがとうございました。残念ながら、私はちょうど黒い画面が表示されるので、ラズベリーpiはスクリプトを正しく読み込んでいません。私はそれを保つつもりです。 –

関連する問題