Ligue para o Lynx do Script JSP
Pergunta
Eu tenho um executivo (string cmd) em um script JSP que chama o método EXEC da classe de tempo de execução.
Funciona quando chamo um comando local, como um script PHP armazenado no servidor. por exemplo:/usr/bin/php/path/to/php/script arg1 arg2
Então, acho que meu comando de execução está ok, pois está trabalhando com isso.
Agora, quando tento ligar para o Lynx, o navegador da Web baseado em texto, ele não funciona.
Se eu chamar isso de terminal, ele funciona bem:/usr/bin/lynx -dump -accept_all_cookies 'http://www.womeurl.net/?arg1=1&arg2=2'
Mas quando eu chamo isso do meu comando de execução, nada acontece ...
Alguma ideia do porquê?
Este é o meu método de execução:
public String execute(String cmd){
Runtime r = Runtime.getRuntime();
Process p = null;
String res = "";
try {
p = r.exec(cmd);
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line = null;
//out.println(res);
while ((line = br.readLine()) != null) {
res += line;
}
p.waitFor();
} catch (Exception e) {
res += e;
}
System.out.println(p.exitValue());
return res;
}
Solução 2
Eu resolvi .... ligando para o Lynx para um script php, script PHP que eu liguei do script JSP ...
É uma solução de merda, mas pelo menos funciona ... Eu ainda não entendo por que o comando EXEC da Java funciona dessa maneira ...
Obrigado pela sua ajuda de qualquer maneira Andrzej (tcheco, acho que pelo nome ..? ^_ ^), De alguma forma você me colocou a caminho!
Outras dicas
Você precisa ler do Process
'Stream de saída.
Como não está, o processo Lynx subjacente provavelmente está bloqueando ao escrever a saída, aguardando alguém para esvaziar o buffer do fluxo de saída. Mesmo se você vai ignorar a saída, precisará lê -lo de qualquer maneira para que o processo seja executado como você esperaria.
Enquanto o Javadocs do processo Digamos: "Como algumas plataformas nativas fornecem apenas tamanho limitado de buffer para fluxos de entrada e saída padrão, a falha em gravar imediatamente o fluxo de entrada ou ler o fluxo de saída do subprocesso pode fazer com que o subprocesso bloqueie e até o impasse".
Ver http://www.javaworld.com/javaworld/jw-2000/jw-1229-traps.html Para alguns exemplos de como lidar com isso.
EDIT: Caso você esteja se perguntando, é provável que, quando você invocou o script PHP, ele não produziu muita saída e, portanto, conseguiu terminar antes de preencher o buffer de saída e bloquear. O comando lynx presumivelmente está produzindo mais saída e, portanto, atingindo esse problema.