String ipAddress = address.getHostAddress();
responseObject.put("ipAddress", ipAddress);
String loginCommand = COMMAND_SSH + userName + "@" + ipAddress;
Process remoteProcess = Runtime.getRuntime().exec(loginCommand);
PrintStream out = new PrintStream(remoteProcess.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(remoteProcess.getInputStream()));
//out.println(password);
while (in.ready()) {
String s = in.readLine();
LOGGER.info(s);
}
out.println(COMMAND_EXIT);
调试时的上述代码始终显示remoteProcess
已退出代码255
,我无法弄清楚原因?我尝试用ls
替换loginCommand并且它正常工作?我可以知道我哪里错了。
P.S:我不允许使用外部库(包括操作系统)。
答案 0 :(得分:0)
您的代码存在一些问题,但它们都不是问题的确切原因,因为根本没有足够的代码。
while (in.ready()) {
String s = in.readLine();
LOGGER.info(s);
}
当流准备好时,in.ready()返回true。你在这里介绍一个竞争条件。如果在in-stream准备好之前到达while(),它将跳过整个语句。 而是使用:
String s;
while ((s = in.readLine()) != null){
LOGGER.info(s);
}
此外,您可能希望确保还阅读标准错误输出。