103

シリアル データを読み取り、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 ループが終了した後もスクリプトを実行し続ける必要があるため、キーボード割り込みを使用したくありません。

4

16 に答える 16

40

非標準モジュールを必要とせず、100% 移植可能なソリューションがあります。

import _thread

def input_thread(a_list):
    raw_input()             # use input() in Python3
    a_list.append(True)
    
def do_stuff():
    a_list = []
    _thread.start_new_thread(input_thread, (a_list,))
    while not a_list:
        stuff()
于 2014-08-22T08:09:21.860 に答える
16

次のコードは私にとってはうまくいきます。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 ...
于 2016-09-01T11:02:35.950 に答える