dúvida sobre Runtime.getRuntime();  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
KolT
Debugger
[Avatar]
Membro desde: 16/04/2005 13:17:18
Mensagens: 61
Localização: Brasília - DF
Offline

Bom, eu to desenvolvendo um projeto opensource e to tendo umas dúvidas sobre o funcionamento do Runtime.getRuntime();

primeiro tentei usar ele para executar o comandu mysqldump -u root teste > /home/kayo/teste.sql mas não executa. depois tentei para mysqldump -u root -p teste > /home/kayo/teste.sql e esse me retornava o pedido de senha.. mas mesmo assim não tive sucesso então usei para abrir o gedit(notepad no windows) e abriu.

então entendi que o Runtime serve para executar uma ação no sistema e não um comando/escrever na shell, to certo? Se sim, como posso então escrever na shell? Preciso saber porque a funão de backup tera duas variaveis que vão dizer a database para ser copiada e o destino para ser salvo, então não posso usar um .bat como já observei pelo fórum.

grato. [desculpa pergunta denovo sobre runtime, mas é que tenho urgencia..]

my life is free now; linux & java
[MSN] [ICQ]
jcatino
Thread.start()
[Avatar]

Membro desde: 18/08/2005 17:41:10
Mensagens: 45
Localização: São Paulo
Offline

(Também respondi sua outra pergunta)

O Runtime.exec executa sim um comando do sistema operacional , então vai rodar num shell.

Só que vc deve se lembrar de ter o executável no PATH, e se não estiver, vc deve setá-la.

Veja a assinatura: exec(String cmd, String[] envp)

O 'envp' é um conjunto de Strings com as variáveis de ambiente (nome e valor) com as que a JVM vai setar o ambiente antes de executar o comando.

Você não precisa redirecionar a saída. Faça:

Process p = Runtime.exec("comando", strVariaveis);

e leia depois o stream no Process p, e poderá saber como foi executado o comando.

Este tipo de execução é síncrono, isto é, a JVM vai esperar ser executado até o fim para conitnuar a execução do programa.

--
J Catino
jcatino
Thread.start()
[Avatar]

Membro desde: 18/08/2005 17:41:10
Mensagens: 45
Localização: São Paulo
Offline


Ah para passar a senha, vc pode pegar o outputStream do processo (p.getOutputStream) e gravar nele: ele será a standard in do que foi acionado, então vc pode escrever a senha lá !

--
J Catino
KolT
Debugger
[Avatar]
Membro desde: 16/04/2005 13:17:18
Mensagens: 61
Localização: Brasília - DF
Offline

ahh entendi, então mysqldump seria uma posicao no array -u outra e assim por diante então? assim podendo executar um comando na shell? acertei ou vuei? =)

my life is free now; linux & java
[MSN] [ICQ]
jcatino
Thread.start()
[Avatar]

Membro desde: 18/08/2005 17:41:10
Mensagens: 45
Localização: São Paulo
Offline


Não, o array é de variáveis de ambiente.

A sua senha não é uma variável de ambiente, seria um argumento a ser digitado após o início da execução do aplicativo.

O melhor mesmo é passar tudo na linha de comando. Se não funcionar, vc terá que abrir o outputStream do processo em execução para 'escrever' a senha sem ter que abrir uma tela de um editor.

Variáveis de ambiente seriam o caminho (PATH), caminho de bibliotecas necessárias, quando é requerido, ou alguma variável que o shell precise.

Ok ?

--
J Catino
jcatino
Thread.start()
[Avatar]

Membro desde: 18/08/2005 17:41:10
Mensagens: 45
Localização: São Paulo
Offline


Fiz um exemplo a partir do que entendi que seria seu caso, vê se ajuda a clarear como é executado...
 Nome do arquivo MyExec.java [Disk] Download
 Descrição Um exemplo de execução
 Tamanho 2 Kbytes
 Baixado:  80 vez(es)


--
J Catino
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team