コンソールにテキストを印刷できるスレッドがあり、メインプログラムにraw_input
はスレッドを制御するためのスレッドがあります。
私の問題は、私が書いているときにスレッドも次のようなものになることです。
-->whatiwWHATTHETHREADWRITErite
でもこういうものが欲しい
WHATTHETHREADWRITE
-->whatiwrite
ありがとうございました!
コンソールにテキストを印刷できるスレッドがあり、メインプログラムにraw_input
はスレッドを制御するためのスレッドがあります。
私の問題は、私が書いているときにスレッドも次のようなものになることです。
-->whatiwWHATTHETHREADWRITErite
でもこういうものが欲しい
WHATTHETHREADWRITE
-->whatiwrite
ありがとうございました!
ロックを作成し、ロックを保持したまますべての入力と出力を実行できます。
import threading
stdout_lock = threading.Lock()
with stdout_lock:
r = raw_input()
with stdout_lock:
print "something"
入力をスレッド出力と同期させて、同時に発生しないようにする必要があります。
メインループは次のように変更できます。
lock = threading.lock()
while 1:
raw_input() # Waiting for you to press Enter
with lock:
r = raw_input('--> ')
# send your command to the thread
次に、バックグラウンドスレッドの印刷をロックします。
def worker(lock, ...):
[...]
with lock:
print('what the thread write')
Press Enter
つまり、スレッドを停止して「入力モード」に入るときです。
具体的には、毎回次のことを行いPress Enter
ます。
-->
してコマンドを待ちますしたがって、スレッドは「入力モード」のときに印刷を試みた場合にのみ停止
し、ターミナルでは次のようになります。
some previous output
---> your input
THE THREAD OUTPUT
cursesのようなものを使用して、バックグラウンドタスクの出力を画面の半分に書き込み、入力/制御を残りの半分に書き込みます。
ほとんどの端末でANSIエスケープコードをいじることもできます。