6

ブロッキング IO 操作をタイムアウトにするこの手法について読んだことがありますが、問題は機能していないように見えることです。例えば:

import thread, threading
   
def read_timeout(prompt, timeout=10.0):
    timer = threading.Timer(timeout, thread.interrupt_main)
    s = ''
    timer.start()
    
    try:
        s = raw_input(prompt)
    except KeyboardInterrupt:
        print 'operation timed out.'
        
    timer.cancel()
    return s
    
s = read_timeout('enter input: ')

if s:
    print 'you entered: %s' % s

raw_input()これは、戻るまでメインスレッドを中断しません。どんな助けでも大歓迎です。

アップデート:

os.kill(os.getpid(), signal.SIGINT)代わりに使用するthread.interrupt_main()とうまくいくようです(少なくともLinuxでは、最初に望んでいた移植性が得られません)。ただし、上記のコードが機能しない理由はまだ疑問に思っています。

4

1 に答える 1

0

Unix マシンでは、やろうとしていることを実行する方法があります。この投稿を見てください: raw_input と timeout

5 行目の末尾のコンマを削除するだけです。削除しないと、プログラムが終了するまでプロンプトが表示されません。

同じページに Windows OS 用のソリューションもありますが、動作するかどうかをテストしていません。

于 2012-05-30T19:29:29.420 に答える