Question

Je suis désolé si le titre est assez déroutant, mais je me demande s'il est possible d'obtenir le stdout d'une application qui est canalisé dans une autre application en java.

Voici la ligne de commande.

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

Si cela est exécuté en bash, c'est la sortie.

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 dernière ligne est mis à jour par sox jusqu'à ce que l'utilisateur envoie SIGINT.

Le problème est, en Java, InputStream à partir de ce procédé ne produit pas de données. Mais si je laisse de côté la tuyauterie de SOx boiteux, sox -d -t wav test.wav, InputStream obtient des données. Ma question est, ce qui est arrivé à la console sur? Comment puis-je obtenir l'accès.

Était-ce utile?

La solution

Lorsque bash commencer à exécuter sox -d -t wav - | lame - test.mp3, en raison du coup de caractère de canal sera fourche à deux processus pour exécuter chaque commande, et connecte ensuite la sortie standard à partir du premier processus avec l'entrée standard pour le second. Bash ne fera rien spécifique avec stderr soit procédé, de sorte que la sortie de l'écran que vous voyez de sox (Input File ...) ne fait pas partie de l'opération de conduite.

D'après ce que je comprends de votre question, vous avez un programme java qui démarre ces deux processus de SOx et boiteux. Plus de détails sur la façon dont vous faites cela serait bien. Mais dans tous les cas pour obtenir la sortie de l'écran vous montriez exemple vous devez lire stderr du processus sox.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top