2016-09-15 7 views
0

公式ドキュメントの例を含めて、多くのリソースは、read_all()を実行する前に最後に書き出す必要があります。コマンド:telnetlib read_all()の後にexit()またはexecが必要な理由

tn.write("ls\n") 
tn.write("exit\n") 

私はなぜこれが必要なのか理解できますか?

終了せずに実行しようとすると、実行されたコマンドの出力が端末に表示されないため、テルネット接続がハングアップします(少なくともハングしているように見えます)。

また、いくつかのリソースで見つかったように、別の方法では、コマンドを実行するために 'exec'を使用していましたが、もう終了する必要はありません。

私もこれを理解するのを手伝ってください。

答えて

0

read_all()は、すべての出力をEOFまで読み込みます。つまり、リモートサーバーが接続を閉じて送信したすべてのデータを返すまで待機します。以前にサーバーに「exit」コマンドを通知していない場合は、それ以上のコマンドはないので、コマンドを待つことになります。そしてデッドロックが発生します。つまり、あなたは、サーバーがあなたが言うすべてのものを送ったことをサーバーが知らせるのを待っているので、開いている接続を保持しています。サーバーは新しい注文を待ち、出力にデータを追加する準備ができています。

関連する問題