将命名管道的生成节点child_process作为stdin

时间:2013-03-25 20:59:24

标签: node.js named-pipes

说我在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'])...

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用exec()

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

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

更精细的方法是在节点中打开命名管道并将其作为stdin传递给您正在产生的进程(参见the option stdio for spawn)。

答案 1 :(得分:1)

答案是使用fs.openchild_process.spawn中的stdio选项:

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

var fd_stdin = fs.openSync('lk.log', 'r');
spawn('node', ['monitor.js'], {
    stdio: [fd_stdin, 1, 2];
});

答案 2 :(得分:0)

来自Ben Noordhuis(核心节点撰稿人) - 10/11/11

  

Windows有一个命名管道的概念,但是你提到mkfifo我   假设您的意思是UNIX FIFO。

     

我们不支持它们,也许永远不会支持它们(非阻塞的FIFO)   模式有可能使事件循环死锁)但你可以使用   UNIX套接字,如果您需要类似的功能。

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

对于unix套接字,请参阅:https://stackoverflow.com/a/18226566/977939

相关问题