Chame o script Perl “interativo” de Java

Eu quero chamar um script Perl “interativo” de um programa Java. Só pela clareza, o contrário (de Perl para Java) não é bom para mim.

O script é interativo no sentido de que requer um pequeno diálogo de configuração com o usuário. Por exemplo, chamar o script em cmd.exe levaria a uma checkbox de diálogo como:

Você quer sobrescrever as configurações antigas? [sim, não (padrão = não)]

e o usuário deve escolher entre escrever sim, não ou nada na linha de comando. E dependendo da escolha do usuário, outra mensagem apareceria: “Você quer …” e o usuário responderá, etc. etc. Acho que você entendeu.

Minha pergunta é como posso ter o mesmo diálogo com o usuário quando o script é chamado em um programa Java? Como posso capturar as perguntas do script para o usuário, mostrá-las ao usuário e enviar a resposta do usuário (incluída no programa Java) para o script?

Um simples Runtime.getRuntime (). Exec () não funciona neste caso.

Espero que eu tenha expressado bastante clara a questão.

Obrigado pela ajuda!

Você deve usar os methods getInputStream / getOutputStream para obter access ao stdin e stdout do perl stript. Você pode ler e gravar nesses streams para simular o comportamento do usuário

OutputStream stdin = null; InputStream stderr = null; InputStream stdout = null; Process process = Runtime.getRuntime ().exec ("..."); stdin = process.getOutputStream (); stderr = process.getErrorStream (); stdout = process.getInputStream (); // "write" the parms into stdin String line = "data\n"; stdin.write(line.getBytes()); stdin.flush(); stdin.close(); // clean up if any output in stdout BufferedReader brCleanUp = new BufferedReader (new InputStreamReader (stdout)); while ((line = brCleanUp.readLine ()) != null) { //System.out.println ("[Stdout] " + line); } brCleanUp.close(); // clean up if any output in stderr brCleanUp = new BufferedReader (new InputStreamReader (stderr)); while ((line = brCleanUp.readLine ()) != null) { //System.out.println ("[Stderr] " + line); } brCleanUp.close(); 

Este é um trabalho para o Expect . Em Java: ExpectJ , expect4j

Se (1) sua chamada for de Java para Perl e (2) você não estiver analisando o próprio script Perl, por que não usar um JOptionPane.showConfirmDialog () do código Java? Não deve ser um grande problema se um sim / não é tudo o que você está recebendo do script. O que quer que você esteja imprimindo para exibir ao usuário pode ser incluído nesse diálogo de confirmação como um texto ASCII simples também.