猿问

Jsch处理命令确认是或否

我正在尝试使用带有 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);

            }


蛊毒传说
浏览 344回答 1
1回答

www说

PrintWriters 除非被要求,否则不会自动刷新,所以我相信您在没有实际发送y.您可以创建一个在使用构造函数调用PrintWriter时将自动刷新的。printlnPrintWriter(OutputStream out, boolean autoflush)我还认为您应该避免在等待结果的循环中调用channel.disconnect(),while (true)因为您可以确定一旦关闭通道就不会得到结果。
随时随地看视频慕课网APP

相关分类

Java
我要回答