如何在 Node.js 中仅从命令行读取一行,类似于 Python 的“input”或 C++ 的

在 Node 中,似乎没有直接的方法可以轻松地从命令行获取一行。

到目前为止我找到的解决方案:

  1. readline模块的on('line', callback)* ]

  2. readlinequestion(q, callback)* ]

  3. process.stdin.pipe(require('split')()).on('data', callback) [*]

  4. fs.readFileSync(0).toString [*]

但以上所有内容都不像pythoninput或 C++那样直接std::getline。(此外,我无法获得选项 (4) 在 Windows 上工作。)

readline方法可能是最好的,但它需要使用 的事实callbacks令人沮丧。


繁星点点滴滴
浏览 63回答 1
1回答

天涯尽头无女友

将专用readline模块的功能包装在 promises 中可能仍然是最好的方法。这里我们模拟 Pythoninput和 C++ 的getline功能。请注意,节点事件不仅具有on功能,而且具有once功能。// input.jsconst 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.jsasync 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();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript