在node.js中终止process.stdin

时间:2014-06-06 05:03:42

标签: node.js

下面的程序只是读取一个字符串并输出它。当我在cmd上运行时,程序不会打印出字符串。它一直在读取输入,直到我以Ctrl+C终止。如何在输入字符串结束时告诉程序,以便打印输出?

var concat=require('concat-stream');
var str=[];
process.stdin.pipe(concat(function(buff){
    console.log(buff.toString());
}));

2 个答案:

答案 0 :(得分:3)

concat-stream正在等待接收finish个活动。在您的示例中,当您关闭stdin时将发生这种情况。如果您在shell中运行它,可以按 Ctrl + D 关闭stdin。如果你正在为你的过程输送一些东西,请确保它在完成后关闭它的标准。

如果您尝试在shell中使脚本具有交互性,请尝试split

process.stdin
  .pipe(require('split')())
  .on('data', function (line) {
    console.log('got “%s”', line);
  });

答案 1 :(得分:1)

显然Todd Yandell的答案是正确的,我已经对它进行了投票,但我想补充一点,除了分裂之外,你还可以考虑使用through来创建一种变换器,它也可以以交互方式工作,因为它不是聚合管道。

就像这个例子一样,你在标准输入中写的所有内容都以标准输出的形式交替显示:

var through = require('through');

function write(buffer){
    var text = buffer.toString();
    this.queue(text.toUpperCase());
}

function end(){
    this.queue(null);
}

var transform = through(write, end);
process.stdin.pipe(transform).pipe(process.stdout);

您甚至可以通过执行以下操作将其与拆分结合使用:

process.stdin
       .pipe(split())
       .pipe(transform)
       .pipe(process.stdout);