So lesen Sie die JSch-Befehlsausgabe kontinuierlich
Wenn Sie einen Befehl über JSch ausführen, ist es wichtig, die Ausgabe kontinuierlich zu lesen, um daraus resultierende Deadlocks zu vermeiden ein voller Ausgabepuffer. So erreichen Sie dies:
<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>
Durch kontinuierliches Lesen der Ausgabe wird die Befehlsausführung nicht blockiert und die Ausgabe kann bei Bedarf abgerufen und verarbeitet werden.
Das obige ist der detaillierte Inhalt vonWie vermeide ich Deadlocks beim Lesen der JSch-Befehlsausgabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!