я запускаю команду оболочки с Process Builder:ProcessBuilder ничего не выводит
try {
ProcessBuilder lmBuilder = new ProcessBuilder("/home/istanbul/srilm/bin/i686-m64/ngram-count", "-text", modelPath, "-order", "3", "-lm", modelOutputPath);
lmBuilder.redirectErrorStream();
final Process lmProcess = lmBuilder.start();
int result = lmProcess.waitFor(); //result becomes 0
InputStream is = lmProcess.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
Когда я проверить вывод команды я вижу, что он работает правильно. Когда я запускаю его через оболочку я вижу, что выход:
warning: discount coeff 1 is out of range: 0
warning: discount coeff 7 is out of range: 1.06876
warning: discount coeff 7 is out of range: 2.09945
Однако, когда я бегу он с помощью процесса строитель я не могу видеть никаких.
Любые идеи?
Не ваш вызов 'Waitfor()' блокировки? Не следует ли читать потоки в своих потоках, потоки, которые запускаются до вызова 'waitFor()'? –
Попробуйте использовать ['ProcessBuilder # inheritIO'] (http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#inheritIO()) и посмотрите, помогает ли это – MadProgrammer
@MadProgrammer вы правы, inheritIO работает в моем случае. Однако redirectErrorStream (true) работает тоже. – kamaci