Pregunta

Lo siento si el título es bastante confuso, pero me pregunto si es posible obtener la salida estándar de una aplicación que se canaliza a otra aplicación en Java.

Aquí está la línea de comandos.

sox -d -t wav - | lame - test.mp3

Si esto se ejecuta en bash, esto es la salida.

Input File     : '/dev/dsp' (ossdsp)
Channels       : 2
Sample Rate    : 48000
Precision      : 16-bit
Sample Encoding: 16-bit Signed Integer PCM

In:0.00% 00:00:25.00 [00:00:00.00] Out:1.20M [     -|=-    ]        Clip:0

La última línea se actualiza por Medias hasta que el usuario envía SIGINT.

El problema es que, en Java, InputStream de ese proceso no produce ningún dato. Pero si omito la tubería de Medias a cojos, sox -d -t wav test.wav, InputStream obtiene datos. Mi pregunta es, ¿qué pasó con la salida de la consola? ¿Cómo puedo obtener acceso a ella.

¿Fue útil?

Solución

Cuando fiesta comienza la ejecución sox -d -t wav - | lame - test.mp3, debido al carácter de fiesta de la tubería se bifurcará dos procesos para ejecutar cada comando, y luego conecta la salida estándar del primer proceso con la entrada estándar a la segunda. Bash no va a hacer nada específico con stderr de cualquiera de los procesos, por lo que la salida de la pantalla que se ve desde sox (Input File ...) no es parte de la operación de la tubería.

Por lo que puedo entender de su pregunta, que tiene un programa Java que se inicia esos dos procesos SOX y poco convincentes. Más detalles acerca de cómo se está haciendo esto sería bueno. Pero en cualquier caso para obtener la salida de pantalla que mostró ejemplo de lo que tiene que leer stderr del proceso de SOX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top