Это может показаться немного неудобным, но я хочу запустить консольную программу на Java, но в ее собственном окне, в то же время используя tee для сохранения вывода в файле журнала , Я переношу программу, которая делает это с Perl на Java, и у меня возникают проблемы с запуском программы с множеством командных команд. В Perl он используетЗапуск внешней программы в Java и конвейере ее вывод
system("dtterm -title $title -e /usr/bin/ksh -c \"".
"cd $dir; ./$exec $arg | tee $exec.log \" &");
Я пытаюсь использовать класс ProcessBuilder для того же.
ProcessBuilder builder = new ProcessBuilder("dtterm", "-title", title, "-e",
"/usr/bin/ksh", "-c" "./" + exec, arg, "|", "tee", exec + ".log");
builder.directory(dir);
Process process = builder.start();
При этом, процесс начинается, это не труба в файл журнала, а также, но это не из Perl. Я попытался использовать метод builder.getInputStream(), но поскольку он отображается в окне dtterm, выход из процесса отсутствует.
Мне нужно иметь отдельные окна, потому что программа запускает несколько разных программ одновременно, каждый со своими окнами. Я попытался запустить его напрямую и отправить вывод из всех процессов в мою программу stdout, но было слишком много, его нужно сохранить отдельно. Если нет способа сделать это, мне придется сделать JFrame, который показывает выходные данные программ, но я хотел бы избежать этого, если это возможно.
Благодаря
Спасибо, это не совсем сработало, но привело меня к этому. Как и у вас, все после -c должно быть в 1 конкатенированной строке, но для строки не нужны кавычки. Я не знаю, почему это было замечено в другом процессе, где я указывал заголовок, у меня появился новый ProcessBuilder («exec», «-title», «\» название программы \ »), и название появилось с «на нем», вывел их, и он все еще работал. Может быть, java сохраняет все, как 1 agument dispite space в строке. –
Вы правы, конечно. Java заботится о том, чтобы один параметр передавался программе в качестве одного параметра, кавычки не нужны. – Bombe
Тем не менее вам все равно нужно избегать специальных символов. :) – Bombe