Недавно захотелось запустить 'нечто' из Java приложения. В роли 'нечто' был 7Zip, в роли приложение было обычный SE класс с методом main().
Так вот, наткнулся на несколько интересный моментов.
Консольный ввод/вывод нового процесса
Итак, у java.lang.Process есть методы позволяющие работать с stdin, stdout и stderr потоками. Но выяснилось, что не все, что выводится на консоль, попадает в потоки stdout/stderr. Для примера можно запустить 7z.exe b. Есть предположение, что подобным образом ведут себя почти все Java приложения. Также есть предположение, что виной этому работа с буфером консоли 'напрямую' (насколько я понял из объяснений, например это вывод символа в заданную позицию консоли).
Скользкие моменты java.lang.Process
Очень понравилась статья
When Runtime.exec() won't
я бы обратил твое внимание на java.lang.ProcessBuilder. даже отцы рекомендуют юзать именно его. а вот хорошая статья, которая рассказывает почему.
ОтветитьУдалить:) Я знаю. Уже второй день 'обращаю внимание'.
ОтветитьУдалитьТаки нет, я не про это читаю второй день. Вот штука позабористей стандартных средств.
ОтветитьУдалить