Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何迭代从Channel(Shell)PrintStream获得的输出_Java_Shell_Jsch - Fatal编程技术网

Java 如何迭代从Channel(Shell)PrintStream获得的输出

Java 如何迭代从Channel(Shell)PrintStream获得的输出,java,shell,jsch,Java,Shell,Jsch,我必须通过java在putty中运行脚本。我使用了通道(“Shell”),但我的代码将从连接到会话等的整个过程打印出来。 其中,当我需要oly时,通过pritnstream发送我保存的命令的输出 我的代码: jsch = new JSch(); session = jsch.getSession(username, host, 22); session.setPassword(pass); java.util.Properties config = new java.ut

我必须通过java在putty中运行脚本。我使用了通道(“Shell”),但我的代码将从连接到会话等的整个过程打印出来。 其中,当我需要oly时,通过pritnstream发送我保存的命令的输出

我的代码:

jsch = new JSch();
    session = jsch.getSession(username, host, 22);
    session.setPassword(pass);
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    System.out.println("Attempting to Connect..!");
    session.setConfig("PreferredAuthentications",
            "publickey,keyboard-interactive,password");
    session.connect();
    Channel channel = session.openChannel("shell");

        ArrayList<String> array=new ArrayList<String>();

        channel.connect();
        OutputStream inputstream_for_the_channel = channel.getOutputStream();
        PrintStream commander = new PrintStream(inputstream_for_the_channel, true);

        commander.println("cd /pre/d02/pinDap75a/opt/ifw/vf/cdr/p3/out/irel");    
        commander.println("irel_wrapper");
        commander.close();
        InputStream outputstream_from_the_channel = channel.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(outputstream_from_the_channel));
        String line;

        while ((line = br.readLine()) != null){


            System.out.println(line);

            }
                do {
            Thread.sleep(1000);
        } while(!channel.isEOF());

        session.disconnect();

    }

}
预期产出:

        <template_name> - Name of the template, to be part of the
                          command line arguments for each batch run.
                          Current options are:
                          P1_VLIVE_ZERO, P1_TXT_ZERO, P1_GSMV_ZERO, P1_GSMVT_ZERO,
                          P1_GPRS_ZERO, P1_OGPRS_ZERO, P1_PXT_ZERO,
                          P1_VLIVE, P1_PXT, P1_GSMV, P1_GSMVT, P1_WAP,
                          P1_TXT, P1_GPRS, P1_OGPRS,
                          P2_VLIVE, P2_PXT, P2_GSMV, P2_GSMVT, P2_WAP,
                          P2_TXT, P2_GPRS,
                          P3A_GSMV, P3B_GSMV, P3C_GSMV, P3D_GSMV, P3E_GSMV,
                          P3A_GPRS, P3B_GPRS, P3C_GPRS, P3D_GPRS, P3E_GPRS,
                          P3A_TXT, P3B_TXT, P3C_TXT, P3D_TXT, P3E_TXT,
                          P3A_PXT, P3B_PXT, P3C_PXT, P3D_PXT, P3E_PXT,
                          P3_GSMVT, P3_GSMF, P3_GSMD, P3_WAP, P3_VLIVE,
                          SUSPENSE, SUSPENSE_UPDATE
-模板的名称,作为
每个批处理运行的命令行参数。
目前的选择是:
P1_VLIVE_ZERO、P1_TXT_ZERO、P1_GSMV_ZERO、P1_GSMVT_ZERO、,
P1_GPRS_ZERO、P1_OGPRS_ZERO、P1_PXT_ZERO、,
P1_VLIVE、P1_PXT、P1_GSMV、P1_GSMVT、P1_WAP、,
P1_TXT、P1_GPRS、P1_OGPRS、,
P2_VLIVE、P2_PXT、P2_GSMV、P2_GSMVT、P2_WAP、,
P2_TXT、P2_GPRS、,
P3A_GSMV、P3B_GSMV、P3C_GSMV、P3D_GSMV、P3E_GSMV、,
P3A_GPRS、P3B_GPRS、P3C_GPRS、P3D_GPRS、P3E_GPRS、,
P3A_TXT、P3B_TXT、P3C_TXT、P3D_TXT、P3E_TXT、,
P3A_PXT、P3B_PXT、P3C_PXT、P3D_PXT、P3E_PXT、,
P3_GSMVT、P3_GSMF、P3_GSMD、P3_WAP、P3_VLIVE、,
悬念,悬念更新

有人能帮我解决如何实现这个使用频道(“Shell”)吗?因为频道(“exec”)不适合我的命令。

一个“Shell”频道实现了一个交互式会话。因此,您自然希望在交互式会话期间阅读服务器将打印的所有内容,包括欢迎消息和命令echo等内容。“exec”会话更适合您正在尝试的操作。您应该坚持使用,并使exec代码正常工作。在exec命令中,无法执行Irel_包装。Exec只能运行putty命令,如mv或cd find。| grep等。当我尝试使用脚本编写器Irel wrapper时,Exec无法执行它。有没有办法使用exec运行脚本??
**commander.println("cd /pre/d02/pinDap75a/opt/ifw/vf/cdr/p3/out/irel");    
        commander.println("irel_wrapper");**
        <template_name> - Name of the template, to be part of the
                          command line arguments for each batch run.
                          Current options are:
                          P1_VLIVE_ZERO, P1_TXT_ZERO, P1_GSMV_ZERO, P1_GSMVT_ZERO,
                          P1_GPRS_ZERO, P1_OGPRS_ZERO, P1_PXT_ZERO,
                          P1_VLIVE, P1_PXT, P1_GSMV, P1_GSMVT, P1_WAP,
                          P1_TXT, P1_GPRS, P1_OGPRS,
                          P2_VLIVE, P2_PXT, P2_GSMV, P2_GSMVT, P2_WAP,
                          P2_TXT, P2_GPRS,
                          P3A_GSMV, P3B_GSMV, P3C_GSMV, P3D_GSMV, P3E_GSMV,
                          P3A_GPRS, P3B_GPRS, P3C_GPRS, P3D_GPRS, P3E_GPRS,
                          P3A_TXT, P3B_TXT, P3C_TXT, P3D_TXT, P3E_TXT,
                          P3A_PXT, P3B_PXT, P3C_PXT, P3D_PXT, P3E_PXT,
                          P3_GSMVT, P3_GSMF, P3_GSMD, P3_WAP, P3_VLIVE,
                          SUSPENSE, SUSPENSE_UPDATE