Process

Pessoal, preciso executar um software Sell internamente no meu software java, por isso preciso manter uma instancia deste software shell funcionando durante a execução do meu software java…estou no linux

este é o codigo teste, consigo ler a mensagem inicial do software, mas não consigo enviar mensagens e receber suas respostas…

 public String executa(String comando) {
        Process p = null;

        try {
            //inicia o softweare maxima no linux
            p = new ProcessBuilder("maxima").start();
        } catch (Exception e1) {
        }

        //manda comando para o software
        try {
            OutputStream os = p.getOutputStream();
            os.write(comando.getBytes());
            os.flush();
        } catch (IOException e1) {
        }

        //Lê o que foi retornado
        InputStream is = new BufferedInputStream(p.getInputStream());
        String resp = "";
        try {
            for (int value = is.read(); value != -1; value = is.read()) {
                System.out.print(Character.toString((char) value));
                resp += (Character.toString((char) value));
            }
            p.waitFor();
        } catch (IOException e) {
        } catch (Exception e) {
        }
        return resp;
    }

    public static void main(String args[]) {
        ProcessWatch pw = new ProcessWatch();
         System.out.println(pw.executa("float(2+2);"));
    }

Vou fazer uma perguntinha. Você consegue comandar esse programa com comandos “expect”? Se não conseguir, talvez não consiga controlá-lo a partir do Java.

Para você entender o que é o tal do Expect, dê uma olhadinha nos seguintes links.


http://expect.nist.gov/FAQ.html

não amigo, ele não é baseado em espect, ele é um sistema shell comum, que tenho que manter uma instancia dele ativa para executar comandos dentro dessa instancia… esse software é o Maxima (software matemático…)
já consegui fazer ele rodar muito bem no windows, pq acho que se dá pelo próprio maxima vesão windows, já no linux estou amanhando destes streams… hora vem alguns, hora vem nenhum…

Ai estou tentando fazer de outra forma, com o ProcessBuilder, mas só consigo obter a mensagem inicial dizendo que o máxima está pronto para ser usado… preciso de enviar comandos para usa-lo mas parece que esses comandos não estão chegando no maxima…

Vai lhe ajudar muito se você colocar os stack traces de suas Exceptions.

e1.printStackTrace();