Problema ao executar comandos externos ao programa

2 respostas
mizumoto

Boa Tarde,

Meu aplicativo precisa executar um comando de prompt em um de seus métodos.
Estou fazendo essa execução da seguinte forma:
Process prc_cur = Runtime.getRuntime().exec(<comando>);
prc_cur.waitFor();
prc_cur.destroy();
O que eu estou achando estranho é que o aplicativo está tendo um comportamento diferente em diferentes máquinas. Em algumas ele funciona normalmente, em outras, o programa para quando chega no momento da execução do comando externo. Entretanto se eu abrir um xterm em qualquer uma das máquinas (esteja o programa funcionando ou não), e tentar executar o comando manualmente, o mesmo funciona sem problema nenhum.

Existe alguma maneira mais eficiente de executar comandos externos?
Alguém já passou por algo parecido ou pode me ajudar de alguma forma?

Obrigado,

2 Respostas

V

Boa tarde, caso não seja necessário a interação do comando com a entrada de novos dados:

StringBuilder retorno = new StringBuilder(); StringBuilder erro = new StringBuilder(); Process processo = Runtime.getRuntime().exec(comando); processo.getOutputStream().flush(); processo.getOutputStream().close(); BufferedReader br = new BufferedReader(new InputStreamReader(processo.getInputStream())); String linha; while ((linha = br.readLine()) != null) { retorno.append(linha); retorno.append(ArquivoDao.NOVA_LINHA); } BufferedReader bre = new BufferedReader(new InputStreamReader(processo.getErrorStream())); while ((linha = bre.readLine()) != null) { erro.append(linhae); erro.append(ArquivoDao.NOVA_LINHA); } br.close(); bre.close(); processo.destroy();

ou se preferir

public Reader execComando(String comando) throws IOException { String[] comandos = {"sh", "-c", comando}; Process p = Runtime.getRuntime().exec(comandos); return new InputStreamReader(p.getInputStream()); }

Até agora estes exemplos funcionaram corretamente no Ubuntu, CentoOS e Fedora.

V

Caso SSH for o sufuciente:


http://mina.apache.org/sshd/index.html

Criado 19 de abril de 2011
Ultima resposta 19 de abr. de 2011
Respostas 2
Participantes 2