Как прочитать только одну строку из командной строки в Node.js, аналогично `input` Python или` std :: getline` в C ++? - PullRequest
0 голосов
/ 05 августа 2020

В Node, похоже, нет простого способа легко получить одну строку из командной строки.

Решения, которые я нашел до сих пор:

  1. readline модуль on('line', callback) [*]
  2. readline s question(q, callback) [*]
  3. process.stdin.pipe(require('split')()).on('data', callback) [*]
  4. fs.readFileSync(0).toString [*]

Но все вышеперечисленное не так просто, как python s input или C ++ std::getline. (Кроме того, я не смог заставить опцию (4) работать с Windows.)

Подход readline, вероятно, лучший, но тот факт, что он требует использования callbacks, разочаровывает.

1 Ответ

1 голос
/ 05 августа 2020

Заключение специальных функций модуля readline в обещания, вероятно, по-прежнему является лучшим подходом. Здесь мы имитируем функциональность Python input и C ++ getline.

ПРИМЕЧАНИЕ, событие узла имеет не только функцию on, но также once функция.

// input.js

const readline = require('readline');

const cmd = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});


/**
 * Emulate Python's `input` function.
 */
export async function input(prompt) {
  return new Promise(r => cmd.question(prompt, r));
}

/**
 * Emulate C++'s `getline` function.
 */
export async function getline() {
  return new Promise(r => cmd.once('line', r));
}
// main.js

async function main() {
  const x = await input('What is x?');
  console.log('x is', x);

  console.log('What is y?');
  const y = await getline();
  console.log('y is', y);
}

main();
...