Saltar al contenido

Java Runtime.getRuntime (): obtener resultados al ejecutar un programa de línea de comandos

Mantén la atención ya que en esta noticia vas a encontrar la solución que buscas.

Solución:

Este es el camino a seguir:

Runtime rt = Runtime.getRuntime();
String[] commands = "system.exe", "-get t";
Process proc = rt.exec(commands);

BufferedReader stdInput = new BufferedReader(new 
     InputStreamReader(proc.getInputStream()));

BufferedReader stdError = new BufferedReader(new 
     InputStreamReader(proc.getErrorStream()));

// Read the output from the command
System.out.println("Here is the standard output of the command:n");
String s = null;
while ((s = stdInput.readLine()) != null) 
    System.out.println(s);


// Read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):n");
while ((s = stdError.readLine()) != null) 
    System.out.println(s);

Lea el Javadoc para obtener más detalles aquí. ProcessBuilder sería una buena opción para usar.

Una forma más rápida es esta:

public static String execCmd(String cmd) throws java.io.IOException 
    java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\A");
    return s.hasNext() ? s.next() : "";

Que es básicamente una versión condensada de esto:

public static String execCmd(String cmd) throws java.io.IOException 
    Process proc = Runtime.getRuntime().exec(cmd);
    java.io.InputStream is = proc.getInputStream();
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\A");
    String val = "";
    if (s.hasNext()) 
        val = s.next();
    
    else 
        val = "";
    
    return val;

Sé que esta pregunta es antigua, pero estoy publicando esta respuesta porque creo que esto puede ser más rápido.

Editar (para Java 7 y superior)

Necesita cerrar Streams y Scanners. Usando AutoCloseable para un código ordenado:

public static String execCmd(String cmd) 
    String result = null;
    try (InputStream inputStream = Runtime.getRuntime().exec(cmd).getInputStream();
            Scanner s = new Scanner(inputStream).useDelimiter("\A")) 
        result = s.hasNext() ? s.next() : null;
     catch (IOException e) 
        e.printStackTrace();
    
    return result;

Si el uso ya tiene Apache commons-io disponible en la ruta de clases, puede usar:

Process p = new ProcessBuilder("cat", "/etc/something").start();
String stderr = IOUtils.toString(p.getErrorStream(), Charset.defaultCharset());
String stdout = IOUtils.toString(p.getInputStream(), Charset.defaultCharset());

Sección de Reseñas y Valoraciones

Si tienes alguna indecisión o forma de ascender nuestro sección te insinuamos ejecutar una anotación y con gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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