while True:
mess = raw_input('Type: ')
//other stuff
ユーザーは何も入力しませんが、私はできません//other stuff
。どうすれば他のものが実行されますが、ユーザーがその時点で何かを入力すると、混乱がその値を変更しますか?
while True:
mess = raw_input('Type: ')
//other stuff
ユーザーは何も入力しませんが、私はできません//other stuff
。どうすれば他のものが実行されますが、ユーザーがその時点で何かを入力すると、混乱がその値を変更しますか?
ワーカースレッドで他のものを生成する必要があります。
import threading
import time
import sys
mess = 'foo'
def other_stuff():
while True:
sys.stdout.write('mess == {}\n'.format(mess))
time.sleep(1)
t = threading.Thread(target=other_stuff)
t.daemon=True
t.start()
while True:
mess = raw_input('Type: ')
mess
これは、グローバルとしての簡単な例です。ワーカー スレッドとメイン スレッド間でオブジェクトをスレッド セーフに渡すには、Queue
オブジェクトを使用してスレッド間で物を渡す必要があることに注意してください。グローバルは使用しないでください。
ワーカー スレッドを使用する代わりに、次の方法で Unix でユーザー入力が利用できるかどうかをポーリングできますselect.select()
。
import select
import sys
def raw_input_timeout(prompt=None, timeout=None):
if prompt is not None:
sys.stdout.write(prompt)
sys.stdout.flush()
ready = select.select([sys.stdin], [],[], timeout)[0]
if ready:
# there is something to read
return sys.stdin.readline().rstrip('\n')
prompt = "First value: "
while True:
s = raw_input_timeout(prompt, timeout=0)
if s is not None:
mess = s # change value
print(repr(mess))
prompt = "Type: " # show another prompt
else:
prompt = None # hide prompt
# do other stuff
ユーザーが押すたびにEnter、mess
値が変更されます。