nodejs fifo在管道到stdout时工作,但在管道到文件时不工作

时间:2016-06-07 12:11:29

标签: javascript node.js linux bash streaming

我正在玩节点和fifos,并且我得到了一些奇怪的行为,我无法解释。基本上,我使用spawn创建一个fifo,为该fifo创建一个writestream,将数据传递给writestream,并生成一个从fifo读取的cat命令。如果我然后将cat命令的结果传递给stdout,它就可以工作,但如果我将它们传递给另一个文件则不起作用。请参阅以下代码

注意:此行为仅在您编写足够的数据以达到写入缓冲区

时才会出现
var fs = require('fs'),
stream = require('stream');

// create read stream
var rs = fs.createReadStream('testinput')

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

// create fifo
var fifo = spawn('mkfifo', ['testfifo']);

fifo.on('exit', function() { // when fifo is created, proceed

    // create outfile and attach fifostream
    var ws = fs.createWriteStream('testoutput')
    var fifows = fs.createWriteStream('testfifo');

    // pipe to fifo
    rs.pipe(fifows);

    // spawn process to read fifo
    var prog = spawn('cat', ['testfifo']);

    // send results somewhere
    prog.stdout.pipe(process.stdout); // this works
    // prog.stdout.pipe(ws); // this doesn't
})

我应该说我为什么试图这样做。我希望有一个流,它从websocket进来,用作期望文件的衍生命令的参数。所以在上面的例子中,一个流进来的流可以被送到cat,就好像cat只是在读一个文件一样。

0 个答案:

没有答案