ProcessBuilder en Java para crear un juez en línea básico

Hemos discutido Process y Runtime para crear un proceso externo. En esta publicación, se analiza ProcessBuilder, que tiene el mismo propósito.
Entendamos una aplicación en la que necesitamos obtener el código fuente y averiguar el idioma. La aplicación necesita una string (que contiene el código fuente) como entrada. La aplicación necesita averiguar el idioma en el que está escrito el código fuente. Los códigos fuente tendrán una extensión relevante. Por ejemplo – 
 

  • El código en lenguaje C tendrá extensión “.c”
  • El código en C++ tendrá la extensión “.cpp”
  • El código en Java tendrá la extensión “.java”
  • El código en Python tendrá la extensión “.py”

Usando el nombre del archivo de entrada, se puede averiguar el idioma requerido que se utilizará.
Recuerde que la compilación de un código en Java se realiza con el comando:
«javac Main.java»
y para ejecutarlo usamos:
«java Main».
Comandos similares existen para otros idiomas. Por lo tanto, necesitamos un archivo de texto separado que contenga todos los comandos que nuestro software debe ejecutar uno por uno.
En caso de error (errores de tiempo de ejecución o del compilador), nuestra aplicación debe escribir los registros de error en un archivo de texto separado. Cualquiera que sea el resultado que produzca el código fuente, nuestra aplicación debería escribirlo en otro archivo de texto.
Usamos la clase «ProcessBuilder» en el paquete «Idioma» que puede ejecutar procesos del sistema operativo. 
Ahora debemos crear un proceso primero- 

ProcessBuilder pb = new ProcessBuilder("cmd"); 

Tenga en cuenta que estamos usando «cmd» para que nuestros comandos se puedan ejecutar fácilmente en el símbolo del sistema.
Supongamos que tenemos nuestros comandos en el archivo «commands.txt» y deseamos almacenar la salida en «output.txt» junto con los registros de errores en «error.txt». Deberíamos contarle al objeto ProcessBuilder sobre todos ellos. La clase «ProccessBuilder» tiene métodos: 
 

  • redirección pública de ProcessBuilder (archivo)
  • redirección de salida pública de ProcessBuilder (archivo de archivo)
  • Error de redirección de ProcessBuilder público (archivo de archivo)

Se han establecido todos los motivos, solo tenemos que comenzar nuestro proceso. Invocar un proceso es como un hilo. Usamos- pb.start()
para iniciar nuestro proceso.
A continuación se muestra un código Java de muestra para compilar y ejecutar otro código Java:
 

Java

// Java program to demonstrate use of ProcessBuilder
// to compile and run external files.
import java.util.*;
import java.io.*;
class Main
{
    public static void main(String [] args) throws IOException
    {
        try {
            // create a process
            ProcessBuilder pb = new ProcessBuilder("cmd");
 
            // take all commands as input in a text file
            File commands = new File("E:\\test\\commands.txt");
 
            // File where error logs should be written
            File error = new File("E:\\test\\error.txt");
 
            // File where output should be written
            File output = new File("E:\\test\\output.txt");
 
            // redirect all the files
            pb.redirectInput(commands);
            pb.redirectOutput(output);
            pb.redirectError(error);
 
            // start the process
            pb.start();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

Para que el código funcione correctamente, siga los siguientes pasos: 
 

  1. Cree una carpeta llamada Texto en el directorio E.
  2. Cree dos archivos de texto vacíos llamados «error.txt» y «output.txt».
  3. Cree un archivo de texto llamado «commands.txt» que debería tener:
    javac Demo.java
    java Demo
  4. Cree un archivo llamado «Demo.java» donde el código fuente debería estar presente y la función «main(String[] args)» debería estar presente en la clase «Demo».
  5. Finalmente compila y ejecuta el código escrito arriba.
  6. Si hay algún error, los registros estarán presentes en el archivo «error.txt», para que la salida no se muestre en «output.txt».

Advertencias: 
 

  • Asegúrese de que el código que desea compilar y ejecutar no contenga un bucle infinito o algo así que pueda hacer que su programa se ejecute para siempre. Puede encargarse de este caso permitiendo que el código fuente se ejecute durante un tiempo fijo. Por ejemplo, si el código tarda más de 10 segundos en ejecutarse, arroja un error que diga algo así como «Límite de tiempo excedido». Para esto, puede usar la función «esperar()» en la clase «Proceso».
  • Debe verificar que el código compila correctamente, solo entonces debe intentar ejecutarlo, de lo contrario, muestre los archivos de registro de errores.

ventajas- 
 

  • Puede crear su propio juez en línea utilizando esta técnica.
  • Le ayudará a vincular su software con el sistema operativo directamente.

Diferencias entre Runtime.getRuntime.exec() y ProcessBuilder: 
Runtime.getRuntime.exec() ejecuta el comando de string especificado en un proceso separado. ProcessBuilder, por otro lado, solo toma una lista de strings, donde se supone que cada string en la array o lista es un argumento individual. Luego, los argumentos se unen en una string y luego se pasan al sistema operativo para que los ejecute. 
 

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

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

Este artículo es una contribución de Suyash Srivastava . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *