在Node.js中接受来自命令行的输入

news2024/12/25 9:00:22

目录

1、简介

2、readlineSync

3、列表选择一个项目:

4、类似滑块范围的UI:


1、简介

如何制作一个Node.js CLI程序使用内置的readline Node.js模块进行交互

如何制作一个节点js CLI程序交互?

Node.js 从版本7起开始提供了readline模块来执行以下操作:从可读流(如process.stdin流)中获取输入,该流在Node执行期间。js程序是终端输入,一次一行。

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout,
});
readline.question(`What's your name?`, name => {
  console.log(`Hi ${name}!`);
  readline.close();
});

 

这段代码询问用户的名字,一旦输入了文本,用户按下回车键,我们就发送一个问候语。

question() 方法显示第一个参数(一个问题)并等待用户输入。一旦按下enter,它就会调用回调函数。

在这个回调函数中,我们关闭readline接口。

readline 提供了几种其他方法,请在上面链接的包文档中查看它们。

如果需要输入密码,最好不要回显,而是显示*符号

最简单的方法是使用readline-sync包,它在API方面非常相似,并且开箱即用。

2、readlineSync

同步读取行,用于交互式运行,以便通过控制台(TTY)与用户进行对话。

import readlineSync from 'readline-sync'
// Wait for user's response.
var userName = readlineSync.question('readline-sync ==> 你的名字? ');
console.log('Hi ' + userName + '!');

 

3、列表选择一个项目

var readlineSync = require("readline-sync"),
  animals = ["Lion", "Elephant", "Crocodile", "Giraffe", "Hippo"],
  index = readlineSync.keyInSelect(animals, "Which animal?");
console.log("Ok, " + animals[index] + " goes to your room.");

 

4、类似滑块范围的UI:

(按Z键向左滑动,按X键向右滑动,按空格键退出)

var readlineSync = require("readline-sync"),
  MAX = 60,
  MIN = 0,
  value = 30,
  key;
console.log("\n\n" + new Array(20).join(" ") + "[Z] <- -> [X]  FIX: [SPACE]\n");
while (true) {
  console.log(
    "\x1B[1A\x1B[K|" +
      new Array(value + 1).join("-") +
      "O" +
      new Array(MAX - value + 1).join("-") +
      "| " +
      value
  );
  key = readlineSync.keyIn("", { hideEchoBack: true, mask: "", limit: "zx " });
  if (key === "z") {
    if (value > MIN) {
      value--;
    }
  } else if (key === "x") {
    if (value < MAX) {
      value++;
    }
  } else {
    break;
  }
}
console.log("\nA value the user requested: " + value);

 

Inquirer.js包.提供了一个更完整和抽象的解决方案。

Inquirer.js包地址:
https://github.com/SBoudrias/Inquirer.js

你可以使用npm install inquirer安装它,然后你可以像这样复制上面的代码:

import inquirer from 'inquirer';
const questions = [
 {
    type: 'input',
    name: 'name',
    message: "你的名字?",
 },
];

inquirer.prompt(questions).then(answers => { 
  console.log(`Hi ${answers.name}!`);
});

 

Inquirer.js允许你做很多事情,比如询问多个选择,单选按钮,确认等等。

了解所有的替代方案都是值得的,尤其是Node.js 提供的内置方案。但如果您计划将CLI输入提升到下一个级别,则可以使用Inquirer.js是最佳选择。

功能和readline-sync包类似,但是功能更加强大,具体使用可以参考官网。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/581875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

styleFlow数学推导

如果 w 和 z 的变换是线性的&#xff0c;即 w az b&#xff0c;那么 dw a dz&#xff0c; 所以 p(w) dw p(z) dz 等价于 p(w) a p(z) 即 w 的概率密度函数是 z 的概率密度函数乘以一个常数因子。 如果 w 和 z 是通过一个可逆的函数 ϕ 相互转换的&#xff0c;即 w ϕ(…

5.29今日黄金最新行情走势分析及多空交易策略

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;上周五(5月26日)美市尾盘&#xff0c;现货黄金收报1946.01美元/盎司&#xff0c;上升4.76美元或0.25%&#xff0c;日内最高触及1957.31美元/盎司&#xff0c;最低触…

1.3 eBPF的工作原理初探 --- 更新中

写在前面 上一节提到过,eBPF程序是面向BPF体系结构指令集编写的,它并不直接运行在Linux内核中,我们可以理解为它是运行在eBPF虚拟机,由eBPF虚拟机来执行eBPF字节码,就像java运行在jvm一样。 我们用一张原理图来看下eBPF程序的编译,加载,验证,钩子,映射等结点。 如上是…

Java学习路线(16)——异常

一、异常 1、概念&#xff1a; 程序在“编译”或“执行”时可能出现的问题。&#xff08;语法错误不算异常&#xff09; 2、常见的异常 数组索引越界空指针日期格式化… 3、作用&#xff1a; 触发异常后&#xff0c;如果没有提前处理&#xff0c;JVM将终止&#xff0c;提高…

chatgpt赋能python:Python中None的使用详解

Python中None的使用详解 在Python语言中&#xff0c;None是一个非常常见的值&#xff0c;它在代码中用来表示空值或未定义的值。本文将介绍Python中None的使用方式&#xff0c;包括创建和比较None对象&#xff0c;以及在函数和类中使用None的方法。 创建和比较None对象 在Py…

chatgpt赋能python:Python中Key的作用及使用方法

Python中Key的作用及使用方法 在Python中&#xff0c;key是一个十分重要的概念。它在数据结构中经常被使用&#xff0c;例如list、dict、set、tuple等等。本文将重点介绍Python中key的作用和使用方法&#xff0c;帮助读者更好地理解和应用它。 什么是Key 首先&#xff0c;我…

返回数组中非零元素的索引np.flatnonzero()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 返回数组中非零元素的索引 np.flatnonzero() 选择题 以下程序的运行结果是? import numpy as np anp.array([0,1,2,3]) print("【显示】a:");print(a) print("【执行】print(n…

JLabel默认是透明的,所以JLabel设置背景色setBackground之前要setOpaque(true);

JLabel默认是透明的,所以JLabel设置背景色setBackground之前要setOpaque(true); 将不透明设为true,再setBackground jlabel.setOpaque(true); jlabel.setBackground(new Color(0, 0, 0, 100)); //将不透明设为true,再setBackgroundjlabel.setOpaque(true); jlabel.setBackgro…

chatgpt赋能python:Python中n次方的介绍

Python中n次方的介绍 Python中的n次方是指将一个数值或变量的值提高到某个指定的指数值。这在数据科学、计算机科学和科学计算等领域中非常常见。 在Python中&#xff0c;我们可以使用内置函数**或pow函数来实现n次方。 通过**进行n次方运算 使用**运算符时&#xff0c;将要…

哨兵3号(Sentinel 3)卫星数据处理

李国春 本文介绍使用RSD处理欧空局哨兵3号&#xff08;Sentinel 3&#xff09;卫星数据的具体方法。 气象数据多用NetCDF格式交换和存储&#xff0c;气象卫星数据也是如此。气象业内认为HDF5也是NetCDF的一部分&#xff0c;虽然文件扩展名使用的是.nc&#xff0c;但是实际上就…

数据在内存中的存储(1)

目录 一.C语言中数据类型的介绍 1.c语言的内置类型及大小&#xff08;单位字节&#xff09; 2.整型家族 3.浮点数家族 4.自定义类型&#xff08;构造类型&#xff09; 5.指针类型 6.空类型 二.整型数据在内存中的存储 1.二进制 2.整型数据在内存中的存储&#xff08;…

读数据压缩入门笔记01_数据压缩导读

1. 建立在数据压缩上的世界 1.1. 数据压缩技术最让人惊异之处在于&#xff0c;它与过去40年里个人计算的很多重大改变有关&#xff0c;但很少有人知道这一点 1.2. 我们当下生活在其中的这个计算世界&#xff0c;完全建立在数据压缩算法之上 1.3. 图像的压缩 1.3.1. 1978年 …

HMM实现中文分词

引言 在隐马尔可夫模型中介绍了HMM的理论部分&#xff0c;为了巩固理论知识&#xff0c;本文基于HMM实现中文分词。具体来说&#xff0c;通过HMM实现基于字级别的分词算法。 HMM 这里简单说明一下&#xff0c;更详细的请参考隐马尔可夫模型。 这里输入序列为 X 1 : N X_{1:N…

【h5】实现语音转文字

【h5】实现语音转文字 一、需求功能概述是&#xff1a; 二、实现过程1、实现按住录音&#xff0c;松开发送。有两个录音按钮。a. 获取用户的麦克风声音和创建一个MediaRecorder对象&#xff1a;b. 启动和停止录音&#xff1a;c. 将音频数据上传到服务器&#xff0c;并在处理完后…

【C++】指针 - 定义和使用,所占内存空间,空指针,野指针,const修饰指针,指针和数组,指针和函数

文章目录 1. 定义和使用2. 所占内存空间3. 空指针4. 野指针5. const修饰指针6. 指针和数组7. 指针和函数 1. 定义和使用 数据类型 * 变量名; 指针的作用是&#xff0c;可以通过指针间接访问内存。 内存编号是从 0 开始记录的&#xff0c;一般用十六进制数字表示。可以利用指…

nodejs+vue社区母婴幼儿用品商城系统

本系统实现了管理员对用户、商品信息、交流论坛、订单信息的管理&#xff0c;是为了满足用户更深层次的需求。除了上述优势外&#xff0c;本系统还具有&#xff1a;查询迅速&#xff0c;搜索资料方便&#xff0c;可靠性强等等在如今这个高速发展的时代&#xff0c;效率决定着你…

十款开源测试开发工具推荐(自动化、性能、混沌测试、造数据、流量复制)

在本篇文章中&#xff0c;我将给大家推荐 10 款日常工作中经常用到的测试开发工具神器&#xff0c;涵盖了自动化测试、性能压测、流量复制、混沌测试、造数据等。 1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务&#xff0c;微服务 API 做功能和性能一体化…

可靠可用性基本知识

可靠可用性基本知识 1. 基本概念1.1 可靠性1.2 可用性 2. 可靠和可用性指标3. 可靠性工程实践相关概念4. FEMA相关知识4.1 基本概念4.2 FEMA分析流程 5. 产品开发流程中可靠可用性测试如何开展5.1 测试可靠可用性输入\输出5.2 可靠可用性开展流程5.3 测试设计5.4 测试执行5.4.1…

chatgpt赋能python:Numpy读音:是“num-pie”还是“num-pee”?

Numpy读音&#xff1a;是“num-pie”还是“num-pee”&#xff1f; 你是否曾经在想&#xff0c;“numpy”这个词怎么念&#xff1f;很多人都有不同的看法。有些人说“num-pie”&#xff0c;而另一些人则说“num-pee”。那么&#xff0c;谁是正确的呢&#xff1f;在这篇文章中&a…

ad18学习笔记三:关于测量点对点

如何测量&#xff1f; 方法有很多种&#xff0c;比如 1、 点击 ‘放置’–》‘尺寸’–》‘线性尺寸’ 2、 快捷工具栏 3、 快捷键 AD如何使用测量命令&#xff1f;-凡亿课堂 AD中的三种测量距离的方式 清除测量标线&#xff1f; 这个简单&#xff0c;在显示测量结果的…