Whileループを使用して、シリアルデータを読み取り、csvファイルに書き込みます。ユーザーが十分なデータを収集したと感じたら、whileループを強制終了できるようにします。
while True:
#do a bunch of serial stuff
#if the user presses the 'esc' or 'return' key:
break
私はopencvを使用してこのようなことをしましたが、このアプリケーションでは機能していないようです(とにかくこの機能のためだけにopencvをインポートしたくありません)...
# Listen for ESC or ENTER key
c = cv.WaitKey(7) % 0x100
if c == 27 or c == 10:
break
そう。ユーザーにループから抜け出させるにはどうすればよいですか?
また、whileループの終了後もスクリプトを実行し続ける必要があるため、キーボード割り込みを使用したくありません。
最も簡単な方法は、通常のCtrl-C
(SIGINT)で中断することです。
try:
while True:
do_something()
except KeyboardInterrupt:
pass
Ctrl-C
はKeyboardInterrupt
を発生させるため、ループの外側でキャッチして無視します。
非標準モジュールを必要とせず、100%輸送可能なソリューションがあります
import thread
def input_thread(a_list):
raw_input()
a_list.append(True)
def do_stuff():
a_list = []
thread.start_new_thread(input_thread, (a_list,))
while not a_list:
stuff()
次のコードは私のために動作します。 openCV(cv2をインポート)が必要です。
コードは、押されたキーを継続的に探している無限ループで構成されています。この場合、「q」キーが押されると、プログラムは終了します。他のキー(この例では「b」または「k」)を押すと、変数値の変更や機能の実行など、さまざまなアクションを実行できます。
import cv2
while True:
k = cv2.waitKey(1) & 0xFF
# press 'q' to exit
if k == ord('q'):
break
Elif k == ord('b'):
# change a variable / do something ...
Elif k == ord('k'):
# change a variable / do something ...
pyHookが役立つかもしれません。 http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=PyHook_Tutorial#tocpyHook%5FTutorial4
キーボードフックを参照してください。これはより一般化されています-KeyboardInterruptを使用するだけでなく、特定のキーボード操作が必要な場合。
また、一般的に(使用方法に応じて)Ctrl-Cオプションを使用してスクリプトを強制終了することは理にかなっていると思います。
前の質問も参照してください: pythonで検出されたキー
Python 3.7については、テストしたPython 3.7のすべてのシナリオで動作するように、user297171による非常に良い回答をコピーして変更しました。
import threading as th
keep_going = True
def key_capture_thread():
global keep_going
input()
keep_going = False
def do_stuff():
th.Thread(target=key_capture_thread, args=(), name='key_capture_thread', daemon=True).start()
while keep_going:
print('still going...')
do_stuff()
これはpynputのインストールに役立つ場合があります-pip install pynput
from pynput.keyboard import Key, Listener
def on_release(key):
if key == Key.esc:
# Stop listener
return False
# Collect events until released
while True:
with Listener(
on_release=on_release) as listener:
listener.join()
break
常にsys.exit()
があります。
Pythonコアライブラリのシステムライブラリには、プロトタイプ作成時に非常に便利な終了関数があります。コードは次の行に沿っています。
import sys
while True:
selection = raw_input("U: Create User\nQ: Quit")
if selection is "Q" or selection is "q":
print("Quitting")
sys.exit()
if selection is "U" or selection is "u":
print("User")
#do_something()