我正在尝试使用带有 Jsch 的 linux 命令处理确认问题(y/n)。我能够在错误流中得到问题。但是在输出流中写一个'y'作为答案后,命令没有得到它。我尝试使用的 SAMPLE 命令是 'rm -i file1.txt' 并且在写入 'y' 后文件没有被删除。在确认应该从输入流中读取的“y”后,我的目标命令也会返回结果。回声 y | 使用 target 命令对我来说不是一个选项。 java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); session.setPassword(password); session.setConfig(config); session.connect(); System.out.println("Connected"); System.out.println(command); ChannelExec channel = (ChannelExec) session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); channel.setInputStream(null); InputStream in = channel.getInputStream(); OutputStream outChannel = channel.getOutputStream(); InputStream errStream = channel.getErrStream(); PrintWriter writer = new PrintWriter(outChannel); channel.connect(); byte[] errTmp = new byte[1024]; while (errStream.available() > 0) { int i = errStream.read(errTmp, 0, 1024); if (i < 0) break; sysout = new String(errTmp, 0, i); System.out.println("Error Line:"+sysout); if(sysout.toLowerCase().contains("remove regular file")) { writer.println("y"); // Works till here but not deleting file } } byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; sysout = new String(tmp, 0, i); System.out.println(sysout); }
1 回答
www说
TA贡献1775条经验 获得超8个赞
PrintWriter
s 除非被要求,否则不会自动刷新,所以我相信您在没有实际发送y
.
您可以创建一个在使用构造函数调用PrintWriter
时将自动刷新的。println
PrintWriter(OutputStream out, boolean autoflush)
我还认为您应该避免在等待结果的循环中调用channel.disconnect()
,while (true)
因为您可以确定一旦关闭通道就不会得到结果。
添加回答
举报
0/150
提交
取消