0

Linuxに名前付きパイプがあるとします。

mkfifo lk.log

コマンドラインから、これを実行して、名前付きパイプファイルに書き込まれたものをすべて印刷できます。

node monitor.js < lk.log

これがスクリプトのように見えるふりをします

// monitor.js

process.stdin.resume();
process.stdin.setEncoding('utf8');

// read data from stdin
process.stdin.on('data', function(chunk) {
    console.log(chunk);
});

を使用してノード内でこれを行うにはどうすればよい child_process.spawnですか?

child_process.spawn('node', ['monitor.js'])...
4

3 に答える 3

1

最も簡単な方法は、次を使用することexec()です。

var exec = require('child_process').exec;

exec('node monitor.js < lk.log', function(err, stdout, stderr) {
  ...
});

より複雑な方法は、ノードで名前付きパイプを開き、それをstdinとしてスポーンしているプロセスに渡すことです(スポーンのオプションstdioを参照)。

于 2013-03-25T21:12:06.433 に答える
1

答えは、次のようfs.openにstdioオプションを使用することchild_process.spawnです。

var spawn = require('child_process').spawn;

var fd_stdin = fs.openSync('lk.log', 'r');
spawn('node', ['monitor.js'], {
    stdio: [fd_stdin, 1, 2];
});
于 2013-03-25T22:45:15.017 に答える
0

Ben Noordhuis(コアノードの寄稿者)から-10/11/11

Windowsには名前付きパイプの概念がありますが、あなたが言及したので、mkfifo私はあなたがUNIXFIFOを意味すると仮定します。

これらはサポートされておらず、おそらくサポートされません(非ブロッキングモードのFIFOは、イベントループをデッドロックする可能性があります)が、同様の機能が必要な場合はUNIXソケットを使用できます。

https://groups.google.com/d/msg/nodejs/9TvDwCWaB5c/udQPigFvmgAJ

UNIXソケットについては、https ://stackoverflow.com/a/18226566/977939を参照してください。

于 2013-08-14T08:41:41.957 に答える