2011-02-08 9 views
2

私は、sys.stdinからのユーザー入力が受け入れられる前に、サーバーに接続する必要のあるPythonでチャットプログラムを作成しています。接続ができない場合、プログラムは終了します。Pythonプログラムがstdinから読み込むものがあるかどうかをどのように知ることができますか?

接続が失敗し、接続しようとし、入力がプログラム終了後にシェルにエコーされながら入力が送信された場合、シェルからこれを実行する:

[email protected]:~$ python chat.py 
attempting to connect... 
Hey there!  # This is user input 
How are you?  # This is more user input 
connection failed 
[email protected]:~$ Hey there! 
Hey there!: command not found 
[email protected]:~$ How are you? 
How are you?: command not found 
[email protected]:~$ 

があった場合に指示する方法はありますsys.stdinの左に入力されるので、チャットプログラムが終了する前にそれを読むことができますか?

私はthis similar questionを読んでいますが、答えは入力があるかどうかを判断する方法ではなく、入力がPythonプログラムにパイプされているかどうかを示す方法しか記述していません。

答えて

3

は、私はあなたがこの問題には2つの一般的な解決策があります Non-blocking read on a subprocess.PIPE in python

+0

入力用の投票はきちんとしていますが、非ブロッキングI/Oも同様に機能します。ありがとう! –

2

標準入力の上、ノンブロッキングI/Oについては、このSO質問をチェックする必要があると思う:

  • あなたがcouldnので出サーバーに接続し、残りの入力をstdinから読み込んで破棄します。これはあなたの即時の問題を今日解決しますが、1つの状況に対処するだけです。

  • (Better)サーバーへの接続が「バックグラウンドで」行われるように、実際のイベントループを設定します。つまり、プログラムは接続しようとしているときにstdinから読み取っています。なんらかの理由で接続が切断された場合は、このソリューションを使用してサーバーに再接続する必要があります。

+0

これらのソリューションの両方で入力がない場合、私は何も読まないように待っています...これは避けたいものです。基本的には、 'stdinから残りの入力をすべて読み込む'は私の質問です。 –

+0

stdinまたはネットワークソケットのブロッキング読み取りを使用しないでください。 –

関連する問題