Я создал эту функцию для чтения нескольких строк из стандартного ввода:
async function readLines() {
const io = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
const lines = [];
io.on('line', line => lines.push(line));
let endOfFile;
io.on('close', () => endOfFile(lines));
return new Promise(resolve => endOfFile = resolve);
}
Когда я вызываю эту функцию несколько раз, как это:
(async () => {
console.log(await readLines());
console.log(await readLines());
})().catch(console.error);
и пытаюсь закончить чтениестрок, нажав Ctrl+D
, только стандартный вызов читает со стандартного ввода, любые последующие вызовы игнорируются.
Возможно ли как-то повторно открыть стандартный ввод, чтобы иметь возможность вызывать эту функцию более одного раза?
Или, чтобы задать другой вопрос: почему node.js закрывает стандартный ввод после нажатия комбинации клавиш Ctrl+D
?
Другие языки, такие как ruby или python, позволяют читать со стандартного ввода после нажатияCtrl+D
.Например, следующий код, написанный на ruby, работает должным образом:
def read_lines
lines = []
while line = gets
lines << line.chomp
end
lines
end
pp read_lines
pp read_lines
Почему node.js ведет себя по-разному?