0

タイトルがかなり紛らわしい場合は申し訳ありませんが、Javaで別のアプリにパイプされているアプリの標準出力を取得できるかどうか疑問に思っています。

これがコマンドラインです。

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

これがbashで実行される場合、これは出力です。

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

最後の行は、ユーザーがSIGINTを送信するまで、soxによって更新されます。

問題は、Javaでは、そのプロセスからのInputStreamがデータを生成しないことです。しかし、soxの配管を省略してラメにするとsox -d -t wav test.wav、InputStreamはデータを取得します。私の質問は、コンソールアウトに何が起こったのかということです。どうすればアクセスできますか。

4

1 に答える 1

1

bashが実行を開始するsox -d -t wav - | lame - test.mp3と、パイプ文字のため、bashは各コマンドを実行するために2つのプロセスをフォークし、最初のプロセスからstdinを使用してstdoutを2番目のプロセスに接続します。Bashはどちらのプロセスのstderrでも特定のことを行わないため、sox(Input File ...)から表示される画面出力はパイプ操作の一部ではありません。

あなたの質問から私が理解できることから、あなたはそれらの2つのsoxとlameプロセスを開始する1つのJavaプログラムを持っています。これをどのように行っているかについての詳細があればよいでしょう。ただし、いずれの場合でも、画面出力を取得するには、soxプロセスからstderrを読み取る必要がある例を示しました。

于 2010-02-28T14:01:51.127 に答える