Para algunos comandos de terminal, que en repetidas ocasiones de salida. Por ejemplo, para algo que se está generando un archivo, es posible que la salida de el por ciento que está completa.

Sé cómo llamar a la terminal de comandos en Java utilizando

Process p = Runtime.getRuntim().exec("command goes here");

pero que no me da una transmisión en vivo de la corriente de salida del comando. ¿Cómo puedo hacer esto para que yo pueda hacer un System.out.println() cada 100 milisegundos, por ejemplo, para ver cuál es la más reciente salida de el proceso fue.

InformationsquelleAutor CodeGuy | 2013-02-16

1 Comentario

  1. 6

    Usted necesita leer InputStream del proceso, aquí hay un ejemplo:

    Editar he modificado el código como aquí se sugiere para recibir el errStream con el stdInput

    ProcessBuilder builder = new ProcessBuilder("command goes here");
    builder.redirectErrorStream(true);
    Process process = builder.start();
    InputStream is = process.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    
    String line = null;
    while ((line = reader.readLine()) != null) {
       System.out.println(line);
    }

    Para la depuración propósito, usted puede leer la entrada como bytes en lugar de utilizar readLine sólo en caso de que el proceso no termina con los mensajes de newLine

    • He intentado esto, pero parece congelar en en.readLine() (no salida de la nada, pero no termina el bucle while)
    • Tal vez el comando que se está ejecutando no salida de cualquier \r y \n caracteres (que sería una señal de las clases bufferedreader que ha leído una línea completa)? Tal vez no genera ninguna salida en ciertos modos de terminal (trate de tuberías el resultado a ‘más’ y ver qué salidas)? Tal vez el comando escribe su salida stderr en lugar de la salida estándar (stdout)?
    • Se congela la espera de la entrada, por lo que sus procesos no cancelar los datos con newline o no escribir en el stdout a todos
    • ver el código que he publicado aquí para más detalles del código Java traté de: stackoverflow.com/questions/14915290/…
    • Intente exec ing mencoder directamente. También, especificar el comando como un String[] en lugar de una sola Cadena (en caso de que cualquiera de los argumentos que se contienen espacios).
    • luego me sale: No se puede ejecutar el programa «mencoder -ss 0 -endpos 60 /Usuarios/Micarpeta/MyVideo.avi -oac copy-ovc copy-o /Usuarios/Micarpeta/salida.avi»: error=2, No existe el fichero o el directorio
    • es /Usuarios/Micarpeta/salida.avi la ruta de acceso absoluta o la relativa a la pwd?
    • puede que necesite especificar la ruta de acceso completa a la mencoder ejecutable.
    • he probado esto, pero el uso de clases bufferedreader que realmente no conseguir que el terminal de texto línea por línea(en tiempo real de la terminal de texto),copia todo el texto que se obtiene después de ejecutar el comando de terminal y la muestra en un solo paso,alguno tiene alguna idea de cómo conseguir en tiempo real de texto carácter por carácter de inputstream?

Dejar respuesta

Please enter your comment!
Please enter your name here