如果您不熟悉 CoffeeScript,here是下面提到的 p1.coffee
和 p2.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)
现在,如果我将它们连接在一起,它只会显示第一个数字和“ block ”:
> coffee p1.coffee | coffee p2.coffee
1
如果重要的话,我在 Windows 上使用 Node v0.10.31。
最佳答案
这可能是 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} ")
关于javascript - 将 Node.js 脚本的标准输出通过管道传输到另一个脚本的标准输入不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692198/