javascript - 将 Node.js 脚本的标准输出通过管道传输到另一个脚本的标准输入不起作用

标签 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)

现在,如果我将它们连接在一起,它只会显示第一个数字和“ 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/

相关文章:

javascript - gsp更改未反射(reflect)在grails 2.5.1中

node.js - Mongoose 查找匹配输入子字符串的所有文档

javascript - 如何在 CoffeeScript 中使用 "g"和 svg 来旋转 d3 中的对象?

testing - 我应该如何在 Mocha 中测试客户端/服务器socket.io?

java - 使用 MQTT (paho) + activeMQ 接收消息的正确方式是怎样的?

javascript - 如何从对象中获取随机键数组,而不是完整列表?

javascript - Node.js回调函数问题

javascript - FeathersJS Sequelize - 关联不起作用

coffeescript - 在coffeescript中写入文本文件

javascript - 使用 JavaScript 在新选项卡中打开 PDF 文件