Рубрики

ProcessBuilder на Java для создания базового онлайн-судьи

Мы обсудили Process и Runtime для создания внешнего процесса. В этом посте обсуждается ProcessBuilder, который служит той же цели.

Давайте разберемся в приложении, где нам нужно получить исходный код и узнать язык. Приложению требуется строка (содержащая исходный код). Приложению необходимо выяснить язык, на котором написан исходный код. Исходные коды будут иметь соответствующее расширение. Например —

  • Код на языке C будет иметь расширение «.c»
  • Код на C ++ будет иметь расширение «.cpp»
  • Код на Java будет иметь расширение «.java»
  • Код в Python будет иметь расширение «.py»

Используя имя входного файла, можно найти требуемый язык, который будет использоваться.

Напомним, что компиляция кода в Java выполняется с помощью команды —
«Javac Main.java»
и для его выполнения мы используем —
«Ява Майн»

Аналогичные команды существуют для других языков. Поэтому нам нужен отдельный текстовый файл, содержащий все команды, которые наше программное обеспечение должно выполнять по одной.

В случае ошибки (Runtime или Compiler Errors) наше приложение должно записывать журналы ошибок в отдельный текстовый файл. Что бы ни выводил исходный код, наше приложение должно записать его в другой текстовый файл.

Мы используем класс «ProcessBuilder» в пакете «Language», который может выполнять процессы ОС.

Теперь мы должны сначала создать процесс

ProcessBuilder pb = new ProcessBuilder("cmd"); 

Обратите внимание, что мы используем «cmd», чтобы наши команды легко выполнялись в командной строке.

Предположим, что у нас есть наши команды в файле «commands.txt», и мы хотим сохранить выходные данные в «output.txt» вместе с журналами ошибок в «error.txt». Мы должны рассказать объекту ProcessBuilder обо всех них. Класс «ProccessBuilder» имеет методы —

  • public ProcessBuilder redirectInput (файл файла)
  • public ProcessBuilder redirectOutput (файл файла)
  • public ProcessBuilder redirectError (Файловый файл)

Все основания были установлены, нам просто нужно начать наш процесс. Вызов процесса — это как поток. Мы используем — pb.start ()
чтобы начать наш процесс.

Ниже приведен пример кода Java для компиляции и запуска другого кода Java.

// Java-программа для демонстрации использования ProcessBuilder
// для компиляции и запуска внешних файлов.

import java.util.*;

import java.io.*;

class Main

{

    public static void main(String [] args) throws IOException

    {

        try {

            // создать процесс

            ProcessBuilder pb = new ProcessBuilder("cmd");

  

            // принимаем все команды как входные данные в текстовом файле

            File commands = new File("E:\\test\\commands.txt");

  

            // Файл, в который должны записываться журналы ошибок

            File error = new File("E:\\test\\error.txt");

  

            // Файл, в который должен быть записан вывод

            File output = new File("E:\\test\\output.txt");

  

            // перенаправить все файлы

            pb.redirectInput(commands);

            pb.redirectOutput(output);

            pb.redirectError(error);

  

            // начать процесс

            pb.start();

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }

    }

}

Чтобы код работал правильно, сделайте следующее:

  1. Создайте папку с именем Текст в E директории.
  2. Создайте два пустых текстовых файла с именами «error.txt» и «output.txt».
  3. Создайте текстовый файл с именем «commands.txt», который должен иметь —
    javac Demo.java
    Ява Демо
  4. Создайте файл с именем «Demo.java», в котором должен присутствовать исходный код и функция «main (String [] args)» в классе «Demo».
  5. Наконец скомпилируйте и выполните код, написанный выше.
  6. Если есть какие-либо ошибки, журналы будут присутствовать в файле «error.txt», чтобы выходные данные не отображались в «output.txt».

Предупреждения:

  • Убедитесь, что код, который вы хотите скомпилировать и выполнить, не содержит бесконечный цикл или что-то подобное, что может привести к тому, что ваша программа будет работать вечно. Вы можете позаботиться об этом, разрешив запускать исходный код в течение фиксированного времени. Например: если выполнение кода занимает более 10 секунд, выдается сообщение об ошибке «Время истекло». Для этого вы можете использовать функцию waitFor () в классе «Process».
  • Вы должны проверить, что код компилируется правильно, только тогда вы должны попытаться запустить его, в противном случае отобразите файлы журнала ошибок.

преимущества-

  • Вы можете создать свой собственный онлайн-судья, используя эту технику.
  • Это поможет вам напрямую связать ваше программное обеспечение с ОС.

Различия между Runtime.getRuntime.exec () и ProcessBuilder:
Runtime.getRuntime.exec () выполняет указанную строковую команду в отдельном процессе. ProcessBuilder, с другой стороны, принимает только список строк, где каждая строка в массиве или списке считается отдельным аргументом. Затем аргументы объединяются в строку, а затем передаются в ОС для выполнения.

   // ProcessBuilder takes a list of argyments
   ProcessBuilder pb =
   new ProcessBuilder("myCommand", "myArg1", "myArg2");

   // Runtime.getRuntime.exec() takes a single string
   Runtime.getRuntime.exec("myCommand myArg1 myArg2")

Эта статья предоставлена Suyash Srivastava . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

ProcessBuilder на Java для создания базового онлайн-судьи

0.00 (0%) 0 votes