Como obter o valor de variáveis especiais do sistema operaciocional?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
mizumoto
Debugger
[Avatar]

Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline

Bom dia,

Estou desenvolvendo um programa que em determinado momento executa um comando de prompt da seguinte forma:



Preciso do valor de retorno do comando, armazenado na variável "$?" (linux) para saber se o comando rodou com sucesso ou deu erro para prosseguir com o programa.
Segue um exemplo de como estou tentando obter esse valor da seguinte forma:



Um simples comando "ls" deveria retornar "0", entretanto um valor "null" está sendo exibido.

Alguém saberia como posso fazer para obter corretamente o valor dessa variável, ou uma forma alternativa para resolver esse problema?

Obrigado,

This message was edited 1 time. Last update was at 10/05/2011 07:58:59

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não é assim que resolve. Todos os comandos de processos vão criar um espaço virtual para esse processo. É como se vc disparasse uma instância do bash para cada execução do exec, e essa instância fosse fechada assim que o exec acaba.

Ou seja, o getEnv jamais verá o que o exec fez.

O que você tem que fazer é controlar a saída padrão desse processo. Para isso, note que o getRuntime().exec retorna um objeto da classe Process. Para isso, você pode usar essa classe, que já deixei pronta: http://www.guj.com.br/java/213361-processbuilder#1087285

O que é interessante é que o bash também permite que você controle a entrada padrão. Isso quer dizer que vc poderia até mesmo interagir com um processo rodando, como se o java fosse o usuário que digitasse no teclado.

This message was edited 1 time. Last update was at 10/05/2011 08:15:31


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
mizumoto
Debugger
[Avatar]

Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline

Obrigado ViniGodoy,

Até hoje nunca havia precisado obter o retorno de um comando disparado por "Runtime.getRuntime.exec("...")" e por distração não havia percebido que isso aí retornava um Process.
O código ficou da seguinte forma:



This message was edited 1 time. Last update was at 10/05/2011 08:40:35

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Ah claro, você só quer o valor de retorno do comando, não o que é listado no ls.

A dica que dei é para você obter o que é listado no ls. Guarde-a num cantinho, pois se vc usa exec, logo, logo vai precisar disso.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team