JSch コマンド出力を継続的に読み取る方法
JSch 経由でコマンドを実行する場合、次のような原因によるデッドロックを防ぐために出力を継続的に読み取ることが重要です。出力バッファーがいっぱいです。これを実現する方法は次のとおりです。
<code class="java">ChannelExec channel = (ChannelExec)session.openChannel("exec"); channel.setCommand(...); ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(); ByteArrayOutputStream errorBuffer = new ByteArrayOutputStream(); InputStream in = channel.getInputStream(); InputStream err = channel.getExtInputStream(); channel.connect(); while (!channel.isClosed()) { // Read stdout continuously while (in.available() > 0) { outputBuffer.write(in.read(tmp, 0, 1024)); } // Read stderr continuously while (err.available() > 0) { errorBuffer.write(err.read(tmp, 0, 1024)); } try { Thread.sleep(1000); } catch (Exception e) {} } System.out.println("output: " + outputBuffer.toString("UTF-8")); System.out.println("error: " + errorBuffer.toString("UTF-8")); channel.disconnect();</code>
出力を継続的に読み取ることで、コマンドの実行がブロックされず、必要に応じて出力を取得して処理できます。
以上がJSch コマンド出力を読み取るときにデッドロックを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。