Execução de programa no MS-DOS
Boa tarde pessoal,
Estou trabalhando em um pequeno projetinho que utiliza Postgres. Preciso executar a instrução:
psql –p 5432 –U postgres -d master -f c:\schema.sql
Quando executo esta instrução ela pede uma senha.
Pois bem, gostaria de saber se existe a possibilidade de eu executar a instrução acima e em seguida enviar para este processo a senha, como se eu estivesse digitando no console do MS-DOS e teclado enter, para poder prosseguir com a execução do mesmo.
Alguém já implementou algo parecido ou já esteve em situação similar?
Eu estava tentando esta solução:
Mas não consegui nenhum resultado até o momento.
Desde já agradeço!
Estou trabalhando em um pequeno projetinho que utiliza Postgres. Preciso executar a instrução:
psql –p 5432 –U postgres -d master -f c:\schema.sql
Quando executo esta instrução ela pede uma senha.
Pois bem, gostaria de saber se existe a possibilidade de eu executar a instrução acima e em seguida enviar para este processo a senha, como se eu estivesse digitando no console do MS-DOS e teclado enter, para poder prosseguir com a execução do mesmo.
Alguém já implementou algo parecido ou já esteve em situação similar?
Eu estava tentando esta solução:
try {
String line;
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;
// launch EXE and grab stdin/stdout and stderr
Process process = Runtime.getRuntime().exec("psql –p 5432 –U postgres -d master -f c:\\schema.sql");
stdin = process.getOutputStream();
stderr = process.getErrorStream();
stdout = process.getInputStream();
// "write" the parms into stdin
line = "postgres" + "\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();
} catch (IOException ex) {
Logger.getLogger(TESTE.class.getName()).log(Level.SEVERE, null, ex);
}
Mas não consegui nenhum resultado até o momento.
Desde já agradeço!
Abraão Monteiro
Curtidas 0
Respostas
Davi Costa
12/04/2011
Abraão,
estou bem curioso pelo progresso nessa Thread.
Realmente nuna havia pegue esses requisitos, estou bem curioso pela sua solução.
Mas se ajudar caso não achasse nenhuma solução, eu abriria a conexão normalmente no java(jdbc ou framework de ORM) e leria o arquivo e processaria o arquivo.
Espero ter dado alguma luz.
Att Davi
estou bem curioso pelo progresso nessa Thread.
Realmente nuna havia pegue esses requisitos, estou bem curioso pela sua solução.
Mas se ajudar caso não achasse nenhuma solução, eu abriria a conexão normalmente no java(jdbc ou framework de ORM) e leria o arquivo e processaria o arquivo.
Espero ter dado alguma luz.
Att Davi
GOSTEI 0
Dyego Carmo
12/04/2011
Tentou mandar um "println("senha")" no stdout ?
GOSTEI 0
Abraão Monteiro
12/04/2011
Ainda não Dyego, vou tentar aqui e posto para você posteriormente.
Só para enriquecer o post. Segue um segundo source a respeito do mesmo assunto.
Só para enriquecer o post. Segue um segundo source a respeito do mesmo assunto.
@Test
public void testSQLExecution() throws Exception {
String path = "C:/tmp";
List<String> commandList = new ArrayList<String>();
commandList.add("psql");
commandList.add("-f");
commandList.add("test.sql");
commandList.add("-h");
commandList.add(HOST);
commandList.add("-p");
commandList.add(PORT);
commandList.add("-U");
commandList.add(DATABASE);
commandList.add(SCHEMA);
ProcessBuilder processBuilder = new ProcessBuilder(commandList);
processBuilder.directory(new File(path));
processBuilder.redirectErrorStream(true);
Process p = processBuilder.start();
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
out.write("password");
out.newLine();
out.flush();
out.close();
// When this line is reached, the execution halts.
while (input.ready() && (line = input.readLine()) != null) {
System.out.println(line);
}
if (p.waitFor() != 0) {
Assert.fail("The process did not run succesfully.");
}
input.close();
}
GOSTEI 0
Abraão Monteiro
12/04/2011
O jeito foi passar sem senha mesmo. Gravei a senha em um arquivo de configuração e quando executo ele simplesmente utiliza esse arquivo para executar com os privilégios necessários não exibindo o prompt.
GOSTEI 0
Dyego Carmo
12/04/2011
Poderia fechar o Post ?
Valeu !
Valeu !
GOSTEI 0