pythonでのraw_input()の使い方


python初心者です．whileループ内でコンソールからの入力の取得をinput()もしくはraw_input()で取得したいのですが，何も入力がない場合はスルーして次のコマンドを実行するようなコードを書きたいと思っています．（コンソールのバッファに何も溜まっていなかったら，`input()`は呼ばない，という実装にしたいのです）  
イメージとしては

[code]

    while True:
        tmp = '0'
        if (console.readable()):
            tmp = input()
            print tmp
    
        hogehoge
    
[/code]

という感じです．（このコードはあくまでイメージなので実際には動きません）  
この`console.readable()`の部分は以前Cで似たようなことをした時に実装した方法なのですが，この部分をpythonで実装するにはどうすればよいか，という質問です．  
なかなか調べても良いページが見当たらず，だれか知恵をお貸しいただけないでしょうか．

よろしくお願い致します




`input()`を非ブロック動作にするためにコンソールのモードを変更したりOS依存モジュールの機能を用いたりするとできるかも知れませんが、アプローチを変えて「`input()`をデーモンスレッドで行わせ結果をキューを通じて主スレッドが取り出したら・・・」と考え以下のような実装を考えてみました。`Input.input()`はデフォルトでブロックモードで動作しますが、`block=True`にするとその時点で入力があった場合は`str`インスタンスを、なかった場合は`None`を返すようにしています。

[code]

    import threading
    import queue
    import time
    
    
    class Input(threading.Thread):
        def __init__(self):
            super().__init__(daemon=True)
            self.queue = queue.Queue()
            self.start()
    
        def run(self):
            while True:
                t = input()
                self.queue.put(t)
    
        def input(self, block=True, timeout=None):
            try:
                return self.queue.get(block, timeout=timeout)
            except queue.Empty:
                return None
    
    
    def main():
        cin = Input()
        for i in range(10):
            time.sleep(1)  # 何かの仕事のつもり
            t = cin.input(block=False)
            print('{}: t={}'.format(i, t))
    
    
    if __name__ == '__main__':
        main()
    
[/code]

(Windows10 cygwin 64bit Python 3.6.4, Ubuntu 16.04LTS Python 3.5.2で試しました)

しかし、cygwin上で動かすと例外発生時のスタックトレースの表示が途中で止まる現象が起きます。何度かENTERを押せば最後まで表示されシェルへ戻りはするのですが。WSLやUbuntuではそういうことは起きませんでした。この実装はコンソールの振る舞いに影響される点があるのだと思います。

少々中途半端な実装のままで恐縮ですが、一つのアイデアとしてコメントしてみました。

