установить OutputStream для процесса - PullRequest
1 голос
/ 31 мая 2011

Вот фрагмент кода моей проблемы:

Process process = Runtime.getRuntime().exec(command);
    if (process.waitFor() != 0)
        throw new Exception("error");
    reader = 
        new BufferedReader(new InputStreamReader(process.getInputStream()));

Рабочий процесс выдает огромный результат.Если я перенаправлю вывод в файл, процесс завершается быстрее, чем вывод на экран (стандартный вывод).Я не хочу перенаправлять вывод в файл из-за низкой производительности диска, прав доступа к файловой системе и т. Д.), и это может занять много времени.Поэтому, чтобы обойти эту проблему, я бы хотел перенаправить стандартный вывод процесса на поток ввода читателя (последняя строка в коде).то есть, вызываемый должен производить вывод в поток, связанный с читателем, вместо того, чтобы печатать вывод на экране.

Надеюсь, я был достаточно ясен.Интересно, как я могу это сделать?Любая помощь будет отличной.

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Если вас не волнует вывод процесса, просто перенаправьте на нулевое устройство, которое > /dev/null в Unix или > NUL в Windows. Все выходные данные будут отброшены, и вам не придется беспокоиться о правах доступа к файлам, производительности и т. Д.

Если вы заботитесь о выводе, посмотрите на этот пост , который показывает вам правильный способ чтения stdout / stderr процесса с использованием StreamGobbler.

0 голосов
/ 01 июня 2011

Вам нужно прочитать вывод перед тем, как вызовет waitFor (). В данный момент вы ожидаете его завершения, что он может сделать только после того, как закончил производить вывод, чего не может сделать, потому что вы не читаете вывод, поэтому его буферы заполнены и он блокируется.

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