M
maksimilian
Ambitioniertes Mitglied
- 0
Hallo Ihr,
ich schicke in einer App via SSH ein Shell-Kommando an einen Pi, was auch funktioniert. Mir gelingt es nur nicht, die vom Kommando erzeugte Ausgabe auszulesen. Mein Code sieht folgendermaßen aus:
lines ist immer leer. Was mache ich falsch ?
maksimilian
ich schicke in einer App via SSH ein Shell-Kommando an einen Pi, was auch funktioniert. Mir gelingt es nur nicht, die vom Kommando erzeugte Ausgabe auszulesen. Mein Code sieht folgendermaßen aus:
Code:
public String ssh_command = "ps -elf";
public class MyThread implements Runnable {
@Override
public void run() {
try {
JSch jsch = new JSch();
//
byte[] buffer = new byte[1024];
ArrayList lines = new ArrayList<>();
//
Session session = jsch.getSession(User, IP, Port); // Port = 22
session.setPassword(Pass);
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
//
session.connect();
//
ChannelExec channelssh = (ChannelExec) session.openChannel("exec");
channelssh.setCommand(ssh_command);
channelssh.connect();
//
// Ausgaben der Konsole auslesen.
InputStream in = channelssh.getInputStream();
String line = "";
while (true) {
while (in.available() > 0) {
int i = in.read(buffer, 0, 1024);
// wenn Ausgabe leer
if (i < 0) {
break;
}
line = new String(buffer, 0, i);
channelssh.setCommand(ssh_command);
lines.add(line);
}
// Wir wurden ausgeloggt.
if (line.contains("logout")) {
break;
}
// Befehl beendet oder Verbindung abgebrochen.
if (channelssh.isClosed()) {
break;
}
// Warte einen kleinen Augenblick mit der nächsten Zeile.
try {
Thread.sleep(1000);
} catch (Exception ee) {
Log.d(LOGTAG, "Exception ee=" + ee);
}
}
//
channelssh.disconnect();
session.disconnect();
Log.d(LOGTAG, "lines=" + lines);
}catch (Exception e){
Log.d(LOGTAG, "Exception e=" + e);
}
} // run
} // MyThread
lines ist immer leer. Was mache ich falsch ?
maksimilian