前提・実現したいこと
Python3で、メインスレッドのフラグがたったら
別スレッドのinput()を終了、若しくは任意のキーが入力されたと認識させてinput()の入力待ちを抜けたい
該当のソースコード
Python
1import time 2from threading import Thread 3from multiprocessing import Value 4 5 6def main(): 7 flg = Value('i', 0) 8 9 th_user_input = Thread(target=user_input) 10 th_user_input.start() 11 12 flg_change(flg) 13 14 while True: 15 if flg.value == 1: 16 """ 17 フラグが立ったらここでuser_input()に対して終了処理or'q'を送信 18 """ 19 break 20 21 22def user_input(): 23 while True: 24 inp = input('>') 25 if inp == 'q': 26 break 27 28 29def flg_change(flg): 30 time.sleep(10) 31 flg.value = 1 32 33 34main()
試したこと
readline()を追加しinput()の代わりにしようと試みたが、ブロッキングは回避できるものの、user_input()が終了できない
Python
1def user_input(flg): 2 import sys 3 4 while True: 5 if flg.value == 1: 6 break 7 8 inp = readline(sys.stdin) 9 if inp is None: 10 contiue 11 elif inp == 'q': 12 break 13 14def readline(fd): 15 import select 16 17 _return = '' 18 (r, w, e) = select.select([fd], [], []) 19 20 if len(r) == 0: 21 _return = None 22 elif len(r) == 1: 23 _return = r[0].readline() 24 25 return _return
補足情報(FW/ツールのバージョンなど)
WindowsとRaspberry Pi3をteratermで繋いで、Raspberry Pi上でPythonを動かしています。
GUIを前提としたパッケージは使えません。
解決方法をご存じの方がいらっしゃいましたら、ご教授頂けると助かります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。