среда, 8 декабря 2010 г.

Знакомство Runtime.exec()

Недавно захотелось запустить 'нечто' из Java приложения. В роли 'нечто' был 7Zip, в роли приложение было обычный SE класс с методом main().
Так вот, наткнулся на несколько интересный моментов.

Консольный ввод/вывод нового процесса

Итак, у java.lang.Process есть методы позволяющие работать с stdin, stdout и stderr потоками. Но выяснилось, что не все, что выводится на консоль, попадает в потоки stdout/stderr. Для примера можно запустить 7z.exe b. Есть предположение, что подобным образом ведут себя почти все Java приложения. Также есть предположение, что виной этому работа с буфером консоли 'напрямую' (насколько я понял из объяснений, например это вывод символа в заданную позицию консоли).

Скользкие моменты java.lang.Process

Очень понравилась статья When Runtime.exec() won't

3 комментария:

  1. я бы обратил твое внимание на java.lang.ProcessBuilder. даже отцы рекомендуют юзать именно его. а вот хорошая статья, которая рассказывает почему.

    ОтветитьУдалить
  2. :) Я знаю. Уже второй день 'обращаю внимание'.

    ОтветитьУдалить
  3. Таки нет, я не про это читаю второй день. Вот штука позабористей стандартных средств.

    ОтветитьУдалить