Как выполнить строку cmd, когда запрашивает пароль с Java - PullRequest
5 голосов
/ 04 февраля 2012

Hy,

Я пытаюсь вывести базу данных postgresql из моего Java-приложения.

В cmd все идет нормально:

pg_dump -U user database>outfile.sql 

и CMD запрашивает пароль

Чтобы получить доступ к этой командной строке из моего Java:

Runtime.getRuntime().exec("pg_dump -U user database>outfile.sql"); 

и теперь он ждет пароля.

Я пытался с Runtime.getRuntime().exec(String[])..., но ничего.

Так или иначе, я должен установить параметр 'пароль' в методе .exec(),

Оператор pg_dump не принимает пароль в командной строке ..

Ответы [ 4 ]

1 голос
/ 02 декабря 2013

Пропущено нажатие кнопки «Ввод».Эта модификация сделала мой трюк:

bw.write("password" + "\n");
0 голосов
/ 12 июня 2018

Полностью рабочее решение:

Process process = Runtime.getRuntime().exec(cmd);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("password\n"); 
bw.flush();

Попытка обновить решение @cortexiphan, но моя правка была отклонена.

0 голосов
/ 05 февраля 2012

спасибо Макс,

Я пробовал это

    Process p = Runtime.getRuntime().exec(cmd);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
    bw.write("password"); 
    //bw.eriteLine();
    bw.flush();

, но все равно ничего.Я использовал InputStreamReader, чтобы увидеть ошибки или сообщения от выполнения cmd, а не ничего.Он все еще ждет «Пароль».

Но у меня было другое решение:

    Process p = Runtime.getRuntime().exec("cmd /c start cmd.exe /C\"pg_dump -U user -W db>outfile.sql\"");

, поэтому черный подсказчик открывается с «Пароль:».напишите пароль, нажмите ввод, и он выключится.

мне достаточно.

Спасибо

0 голосов
/ 04 февраля 2012

Вы можете перенаправить стандартный ввод процесса, как описано в этот вопрос .

По сути, они используют метод Process.getInputStream и записывают в поток, который возвращает этот метод (например, с BufferedWriter).

Вы получаете необходимый объект Process, возвращенный методом exec().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...