下面的程序只是读取一个字符串并输出它。当我在cmd
上运行时,程序不会打印出字符串。它一直在读取输入,直到我以Ctrl+C
终止。如何在输入字符串结束时告诉程序,以便打印输出?
var concat=require('concat-stream');
var str=[];
process.stdin.pipe(concat(function(buff){
console.log(buff.toString());
}));
答案 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);