【发布时间】:2016-06-05 00:09:52
【问题描述】:
从 shell 管道收到数据后,我需要通过提示询问用户。但应用程序在从管道读取数据后立即关闭。热到让它等待用户输入?
var readline = require('readline');
var data = '';
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if (chunk !== null) {
data+=chunk;
}
});
process.stdin.on('end', function() {
console.log('from pipe: ' + data);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('prompt> ', (answer) => {
console.log('from prompt: ', answer);
rl.close();
});
});
当我运行这个脚本时
$ echo "pipe" | node app.js
打印出来
from pipe: pipe
prompt>
并立即退出,从不等待提示。
我在 Windows,Node v4.2.1
【问题讨论】:
-
您在问题中调用
rl.close(),所以它关闭了。删除它并仅在实际完成后关闭它。 -
看起来 Node 线程不等待事件处理程序。
-
@aug
rl.close()实际上没有被调用。代码执行不会进入question回调。 -
@S.D.它确实等待超时:如果我用
readline替换操作setTimeout(function () { console.log('waited'); }, 1000);,它将打印出'等待' -
当你使用管道时,这是一个标准输入。读完所有的标准输入后建议你想使用 TTY
标签: node.js stdin prompt node.js-stream