为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 2022-12-22 12:44:00
在 Node 中,似乎没有直接的方法可以轻松地从命令行获取一行。到目前为止我找到的解决方案:readline模块的on('line', callback)[ * ]readline的question(q, callback)[ * ]process.stdin.pipe(require('split')()).on('data', callback) [*]fs.readFileSync(0).toString [*]但以上所有内容都不像pythoninput或 C++那样直接std::getline。(此外,我无法获得选项 (4) 在 Windows 上工作。)该readline方法可能是最好的,但它需要使用 的事实callbacks令人沮丧。
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

将专用readline模块的功能包装在 promises 中可能仍然是最好的方法。这里我们模拟 Pythoninput和 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();


查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号