使用apache commons-exec将多个值发送到外部进程时出错

时间:2014-04-02 22:07:12

标签: java command-line process stream apache-commons-exec

我正在尝试编写一个小应用程序来自动使用外部应用程序,这是cisco任何连接移动客户端。它提供了一个命令行工具,可用于连接到VPN。

我想使用apache commons-exec库从我的java应用程序运行这个命令行工具,并能够读取他的输出以发送所需信息。

我已经在网上搜索了#34;如何沟通&#34;有一个外部应用程序,但我发现的唯一帖子是这篇文章:Trouble providing multiple input to a Command using Apache Commons Exec and extracting output它只是说&#34;嘿,我找到了解决方案&#34;但我不明白他是如何做到的。< / p>

当我开始这个过程时,我运行一个读取输入的函数:

Thread T = new Thread() {
        public void run() {
            String line;
            try {
                line = processOutput.readLine();
                while (line != null) {
                    System.out.println(line);
                    if(line.contains("VPN-Password")){
                        sendMessage(processInput, "1");
                    }
                    if(line.contains("Please enter your username     and password")){
                        sendMessage(processInput, "username");
                    }
                    line = processOutput.readLine();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    };
    T.start();

函数发送消息只是运行一个线程在进程输入流中写入然后刷新它。

Thread T = new Thread() {
        public void run() {

            try {
                os.write((message+"\n").getBytes());
                os.flush();
                System.out.println("SENT : "+message);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }

    };
    T.start();

正如您所看到的,我检查输出以根据它向进程发送消息(基本上是回答问题)。但是,当谈到&#34;请输入...&#34;,我得到了这个例外

java.io.IOException: Read end dead

我的问题是我找不到如何沟通&#34;通过阅读他的输出并根据它告诉我的信息发送消息来完成该过程。

你能帮助我吗?

感谢阅读。

0 个答案:

没有答案