Linux cmd执行后的java读取输出将进入无限循环
我正在从jsch执行cmd,一旦命令完成,我需要显示命令输出。在读取命令输出时,它需要很长时间,而且即使在执行命令之后,它的ns也不会来自while循环。以下是我的代码:
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session=jsch.getSession(user, host, 22);
session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
channel=session.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
ps.println(cmd);
InputStream in=channel.getInputStream();
byte[] tmp=new byte[1024];
while(channel.getExitStatus() == -1){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(3000);}catch(Exception ee){}
}
共 (0) 个答案