Comment lire en continu la sortie d'une commande JSch
Lors de l'exécution d'une commande via JSch, il est essentiel de lire en permanence la sortie pour éviter les blocages résultant de un tampon de sortie complet. Voici comment y parvenir :
<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>
En lisant continuellement la sortie, l'exécution de la commande n'est pas bloquée et la sortie peut être récupérée et traitée selon les besoins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!