nodejs参数的处理与用户的交互
解析脚本参数
作为脚本或者命令行工具,一般都需要支持不同的用户参数。默认参数被保存在process.argv的数组中,如下:
[ nodeBinary, script, arg0, arg1, ... ]
模块commander
但是为了更方便地处理参数,我们可以使用第三方模块commander。安装如下:
npm install --save commander
然后我们可以使用commander如下:
#!/usr/bin/env node
- console.log('Hello, world!');
+ var program = require('commander');
+
+ program
+ .arguments('<file>')
+ .option('-u, --username <username>', 'The user to authenticate as')
+ .option('-p, --password <password>', 'The user's password')
+ .action(function(file) {
+ console.log('user: %s pass: %s file: %s',
+ program.username, program.password, file);
+ })
+ .parse(process.argv);
运行和结果如下:
snippet -u kannonboy -p correcthorsebatterystaple my_awesome_file
user: kannonboy pass: correcthorsebatterystaple file: my_awesome_file
默认的帮助已经被自动生成了,如下:
snippet --help
Usage: snippet [options] <file>
Options:
-h, --help output usage information
-u, --username <username> The user to authenticate as
-p, --password <password> The user's password
用户的交互
可以使用内置的process.stdin来处理,
但是可以使用第三方模块co-prompt,安装如下:
npm install --save co co-prompt
修改上面的如下:
+ var co = require('co');
+ var prompt = require('co-prompt');
var program = require('commander');
...
.option('-u, --username <username>', 'The user to authenticate as')
.option('-p, --password <password>', 'The user's password')
.action(function(file) {
+ co(function *() {
+ var username = yield prompt('username: ');
+ var password = yield prompt.password('password: ');
console.log('user: %s pass: %s file: %s',
- program.username, program.password, file);
+ username, password, file);
+ });
})
然后运行:
snippet my_awesome_file
username: kannonboy
password: *************************
user: kannonboy pass: correcthorsebatterystaple file: my_awesome_file
参考:
https://blog.developer.atlassian.com/scripting-with-node/
nodejs参数的处理与用户的交互的更多相关文章
- linux内核空间与用户空间信息交互方法
linux内核空间与用户空间信息交互方法 本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与 ...
- iOS10 UI教程禁用视图与用户的交互
iOS10 UI教程禁用视图与用户的交互 在上文中我们提到了使用isHidden属性和alpha属性可以使视图与用户的交互被禁用,除此之外此功能还可以使用UIView的isUserInteractio ...
- 基础知识:IDE集成开发环境(pycharm)、基本数据类型、用户的交互、运算符
今日内容: 1.IDE集成开发环境(pycharm) 2.基本数据类型(int.float.str.list.dict) 3.用户的交互(注释.输入input.输出print) 4.运算符(分类及使用 ...
- Python与用户的交互
目录 Python与用户的交互 为什么交互 如何交互 Python2 中的交互 Python与用户的交互 为什么交互 让我们来回顾计算机的发明有何意义,计算机的发明是为了奴役计算机,解放劳动力.假设我 ...
- Python与用户相交互
今日所得 Python中注释的重要性 Python与用户相交互: 1.输入 2.输出 3.格式化输出 Python的基本数据类型:int,float,str,list,dict,bool 运算符 1. ...
- springmvc-高级参数绑定-映射-异常-json数据交互-拦截器
1.1. 高级参数绑定 1.1.1. 复制工程 把昨天的springmvc-web工程复制一份,作为今天开发的工程 复制工程,如下图: 粘贴并修改工程名为web2,如下图: 工程右键点击,如下图: 修 ...
- linux内存(三)内核与用户空间交互
来自网址http://www.kerneltravel.net/jiaoliu/005.htm 用户程序和内核的信息交换是双向的,也就是说既可以主动从用户空间向内核空间发送信息,也可以从内核空间向用户 ...
- shell练习--用户下载交互检测
#!/bin/bash #By spinestars #-- read -p "请输入下载目录路径" down_dir read -p "请输入网址路径" ur ...
- Nodejs+Express+Mysql实现简单用户管理增删改查
源码地址 https://github.com/king-y/NodeJs/tree/master/user 目录结构 mysql.js var mysql = require('mysql'); v ...
- 【JavaFx教程】第三部分:与用户的交互
第3部分的主题: 在表中反应选择的改变(TableView中). 增加增加,编辑和删除按钮的功能. 创建自定义弹出对话框编辑人员. 验证用户输入. 响应表的选择 显然,我们还没有使用应用程序的右边.想 ...
随机推荐
- git与svn的对比-copy
SVN与Git比较的优缺点差异 目录: SVN与Git比较(一)集中式vs分布式 SVN与Git比较(二)版本库与工作区 SVN与Git比较(三)全局版本号和全球版本号 SVN与Git比较(四)部 ...
- 2020年最新版区块链面试题2-copy
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...
- biancheng-Java设计模式:23种设计模式全面解析(超级详细)
http://c.biancheng.net/design_pattern/ 24种设计模式 1.创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创 ...
- 推荐一款非常好用的在线 SSH 管理工具
前言 SSH工具在远程连接.文件传输.远程管理和增强安全性等方面发挥着重要作用,是我们开发人员和系统管理员不可或缺的工具.今天大姚给大家推荐一款非常好用的在线 SSH 管理工具:Xterminal. ...
- Kali 安装谷歌拼音
Kali 安装谷歌拼音 1. 安装 Google 输入法 sudo apt install fcitx-googlepinyin 2. 重新启动系统 reboot 3. 打开开始菜单,搜索fcitx配 ...
- shell脚本sed命令
Sed 是一个脚本型的编译器,全称StreamEDitor,即流编辑器是非交互式的编辑器 sed 原理简析sed 以行为处理单位,每次从标准输入/文本获取一行信息,存储到其" 模式空间 &q ...
- Flink Maven项目,依赖配置pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- IDEA中创建Spring Boot项目(SSM框架)
一.IDEA创建新Maven项目 创建maven项目完成 因为创建多模块项目,删除根目录src目录 二.maven多模块项目配置 需要创建的模块 umetric-web 控制层 umetric-we ...
- 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
在上一篇文章中,我介绍了 Sdcb Chats 如何集成 DeepSeek-R1 模型,并利用其思维链(Chain of Thought, CoT)功能增强 AI 推理的透明度.DeepSeek-R1 ...
- Linux嵌入式设备怎么确定网络端口的速率
Linux嵌入式设备怎么确定网络端口的速率 突发奇想,就是Linux下面我能不能查询到端口的速率,以此来判断要不要频繁的发送网络数据包呢? 或者更换包利用率更高的协议呢. 于是抱着这样的想法,我开始学 ...