のInputStreamを監督私は、次のbashスクリプトを起動し、非同期的にその標準出力をキャプチャしようとしている:ここでが生成されたプロセス
#!/bin/bash
sleep 2;
echo "one";
sleep 2;
echo "two";
sleep 2;
echo "three";
# ... possibly infinite..
は、Javaコードは、これまでのところです:
ProcessBuilder pb = new ProcessBuilder("sleeper");
Process process = pb.start();
InputStream input = process.getInputStream();
// now I continue in pseudo-code:
supervise the input-stream.
whenever a new line arrives:
check if the line equals "two";
then: doSomeAction();
注:I実際にJavaでプログラムを書いているわけではありません。私はClojureに書いていますが、私はまだClojureのアプローチを見つけていません。だから私はClojureでラップされたJavaネイティブAPIを使用しようとしています。
nodejs例
カントーはもう少し私の意図を明確に、ここでは正確に行いNode.jsのためのJavaScriptコードは、私が欲しいものです:
const spawn = require('child_process').spawn;
const sleeper = spawn('sleeper');
sleeper.stdout.on('data', (data) => {
if (data.toString() === "two\n") {
doSomeAction();
}
});
入力ストリームの処理を別のスレッドで行い、別のスレッドから制御しますか?または、特定のデータを取得するまで、またはプロセスが終了するまで、プロセスを処理する必要がありますか? –
いいえ、私が判断できる限り、別のスレッドは必要ありません。サブプロセス(「スリーパー」)は、重い計算アプリケーションではありません。それは実際には小さなサーバーを実行するUnixツールなので、実際は無限に動作します。しかし、私のアプリケーションにとって重要なことは、サブプロセスを監督している間にブロックされていないことです。それ以外のものはすべて続行する必要があります。 –