将node.js脚本的stdout管道连接到另一个stdin不起作用

时间:2014-09-05 18:52:42

标签: javascript node.js coffeescript

如果您不熟悉CoffeeScript,here是下面提到的p1.coffeep2.coffee的JavaScript版本。

将node.js脚本stdout管道传输给另一个人的stdin似乎无法正常工作。我p1.coffee尽可能快地将数字输出到stdout

i = 0
(->
    i += 1
    process.stdout.write "#{i} "
    )() while true

我现在有p2.coffee,它确实像cat那样:

process.stdin.on 'end', -> console.log "EOF"
process.stdin.pipe(process.stdout)

现在如果我将它们组合在一起,它只显示第一个数字和#34;块"有:

> coffee p1.coffee | coffee p2.coffee
1 

如果重要的话,我在Windows上使用节点v0.10.31。

1 个答案:

答案 0 :(得分:2)

这可能是 Windows 特定问题。我在 OS X 上使用 Node.js v0.10.31 尝试了以下操作,它运行良好:

// cat.js

process.stdin.once('end', function () {
    console.log('EOF');
});
process.stdin.pipe(process.stdout);


// count.js

var i = 0;
while (true) {
    process.stdout.write(i++ + ' ');
}

并将 count.js 的输出传送到 cat.js

node count.js | node cat.js

另请注意,您的CoffeeScript会编译为:

var i;

i = 0;

while (true) {
  (function() {
    i += 1;
    return process.stdout.write("" + i + " ");
  })();
}

在循环中创建函数会使代码变慢。你可以改为:

i = 0
loop process.stdout.write("#{i += 1} ")