Как я могу использовать Java для получения StandardOutput из PipeViewer - PullRequest
0 голосов
/ 25 марта 2019

Я хочу восстановить свою базу данных с помощью сценариев SQL и следить за ходом восстановления. Кроме того, я использую команду pv, чтобы увидеть прогресс восстановления, и она хорошо работает в терминале Linux, и я вижу прогресс. Но когда я использую Java для его выполнения, я не могу получить стандартный вывод pv, указывающий на прогресс.

public void restore() throws IOException, InterruptedException {

    String s  = "pv -p /var/test.sql | mysql -h127.0.0.1 -uroot -ptest -D test";
    Process process = null;
    String[] cmd = { "/bin/sh", "-c", s};

    try {
        process = Runtime.getRuntime().exec(cmd);
        BufferedReader stdInput = new BufferedReader(new
                InputStreamReader(process.getInputStream()));

        BufferedReader stdError = new BufferedReader(new
                InputStreamReader(process.getErrorStream()));

        System.out.println("Here is the standard output of the command:\n");
        String s1 = null;
        while ((s1 = stdInput.readLine()) != null) {
            System.out.println(s1);
        }

        System.out.println("Here is the standard error of the command (if any):\n");
        while ((s1 = stdError.readLine()) != null) {
            System.out.println(s1);
        }
        System.out.println("after");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Я ожидаю, что вывод «Внимание: использование пароля в интерфейсе командной строки может быть небезопасным. [================================================= ================================================== ================================================== ================================================== ==========>] 100% "

, но фактический результат - «Предупреждение. Использование пароля в интерфейсе командной строки может быть небезопасным.», И прогресс не может быть получен.

Я давно гуглил, но не нашел решения этой проблемы, может кто-нибудь мне помочь ??

...