命令行分析组件IKende.CLI
IKende.CLI是一款开源的命令行分解组件,它可以简地把命令行字符转换成命令对象。在编写CLI应用的时候经常要对命令字符进行繁锁的分解和转换工作,而IKende.CLI的存也是为了解决以上问题而产生;通过特性的描述来简化命令分析工作,从而让在编写CLI的时候制定命令变得更方便简单。下面简单地讲解组件的使用
组件结构
在使用前先了解一下组件的结构
Parse是组件的切入点,也是使用的主要对象。他依据两个对象来对数据进行分析处理分别是ILineAnalyzer和CommandBuilder.
ILineAnalyzer
接口主要描述对命令行字符进行分析并返回一个统一的数据结构,组件提供一个默认实现;由于使用习惯的问题也可以制其他命令分解方式。
CommandBuilder
对象的主要作用是根据ILineAnalyzer结构绑定到对象中,通过CommandAttribute和ArgumentAttribute两个特性来描述对象及其属性和命令字符的对应关系。整个组件的设计都比较简单,还有两个接口ICommand和IConvert就不作详细介绍了分别的命令定义规则和参数转换规则的定义。
定义命令对象
组件默认分析器命令属性是以[-字母]来描述一个命令属性,然后空格跟随就是属性的内容如:
login -h host -p port -u userName -w password
以上是一个简单地登陆指令,分别有主机名,端口,用户名和密码等信息。针对以上字符命令制定的命令对象如下:
[Command("login")]
public class Login : CommandBase
{
[Argument("h", "-h Host", Regex = @"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$")]
public string Host
{
get;
set;
}
[Argument("p", "-p Port", DefaultValue = "8088", Regex = @"^\d{4,5}$")]
public int Port
{
get;
set;
}
[Argument("u", "-u userName")]
public string UserName
{
get;
set;
}
[Argument("w", "-w passWord")]
public string Pwd
{
get;
set;
}
}
由于有些属性的数据是规范的,所以可以通过Argument特性的Regex属性来制定一个数据约束规范;特性同样也提供DefaultValue来描述一个属性的默认值,如果在编写命令时没有指定该属性值则使用默认值。
使用
命令定义好后只需要使用Parse对象对输入的字符命令分析即可。
Parse<LineAnalyzer> mParse = new Parse<LineAnalyzer>();
mParse.LoadAssembly(typeof(Login).Assembly);//or mParse.Load<Login>();
string line="login -h www.ikende.com -u henry -w 123456";
ParseResult presult = mParse.Execute(line);
if (string.IsNullOrEmpty(presult.Error))
{
//presult.Command
}
在定义Parse对象的时候而要指定LineAnalyzer分析器,分析器类型的指定则根据实际应用的需求。Parse定义完成后需要加载相应的命令信息,类提供了两个方法Load和LoadAssembly分别用于加载单个对象或某程序集下面的所有命令对象。最后通过执行Execute方法得到具体ParseRresult对象,在分析过程有可能存在逻辑上的错误,通过ParseResult.Error属性可以得到具体逻辑错误信息。
应用效果
组件项目地址
https://github.com/IKende/IKendeCLI
命令行分析组件IKende.CLI的更多相关文章
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- Angular4.0用命令行创建组件服务出错
之前使用cnpm创建的angular4.0项目,由于cnpm下载的node_modules资源经常会有部分缺失,所以在用命令行创建模板.服务的时候会报错: Error: ELOOP: too many ...
- 多版本uboot命令行分析
1.1.6 经典版本: 1.uboot第二阶段第一个函数void start_armboot (void),一路gd参数设置.设备初始化.控制台初始化.端口初始化,最后到main_loop ()命令行 ...
- 命令行分析java线程CPU占用
1.使用top命令找出占用cpu最高的JAVA进程pid号 2. 找出占用cpu最高的线程: top -Hp -n 1 3. 打印占CPU最高JAVA进程pid的堆栈信息 jstack pid &g ...
- xsp4 命令行配置运行(CLI工具)
xsp不必单独安装,它会在安装xamarin studio的时候出现在bin目录下,当然xsp是开源的地址:https://github.com/mono/xsp 常规使用方式如下: --root G ...
- Apache Commons CLI命令行启动
今天又看了下Hangout的源码,一般来说一个开源项目有好几种启动方式--比如可以从命令行启动,也可以从web端启动.今天就看看如何设计命令行启动... Apache Commons CLI Apac ...
- atitit.基于 Commons CLI 的命令行原理与 开发
atitit.基于 Commons CLI 的命令行原理与 开发 1. 命令行支持的格式有以下几种: 1 2. json化,map化的命令行参数内部表示 1 3. Ati cli 2 4. CLI库 ...
- 直接命令行中执行PHP代码(PHP CLI模式)
一般执行PHP代码,需要把PHP代码写成一个文件,但是有时候查一些PHP配置没有这个必要,能不能直接执行PHP代码呢? 答案是可以的. 在命令行下,采用CLI方式执行PHP代码,这里列出几个常用的命令 ...
- PHP的CLI命令行运行模式浅析
在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务.比如对数据进行处理统计等.当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的 ...
随机推荐
- BZOJ.5319.[JSOI2018]军训列队(主席树)
LOJ BZOJ 洛谷 看错了,果然不是\(ZJOI\)..\(jry\)给\(JSOI\)出这么水的题做T3么= = 感觉说的有点乱,不要看我写的惹=-= 对于询问\(l,r,k\),设\(t=r- ...
- 英语口语练习系列-C41-食物词汇-鹊桥仙
词汇 1, rice [raɪs] n. 稻:米饭 vt. 把-捣成米糊状 Rice: 米饭 | 大米 | 稻 2, bread [bred] n. 面包:生计 vt. 在-上洒面包屑 Bread: ...
- vue插件官方文档,做个记录
vue的插件,组件都可以按照这种方式添加 官方文档 https://cn.vuejs.org/v2/guide/plugins.html 做个记录用
- VS2017下使用Git遇到的问题
我在使用最新版的VS2017时,想获取服务器上最新代码,Fetch到了最新修改,但是在拉取代码的时候出现了问题 user@user-PC MINGW64 /d/demo/myrepos (dev-cs ...
- centos7安装kubeadm
安装配置docker v1.9.0版本推荐使用docker v1.12, v1.11, v1.13, 17.03也可以使用,再高版本的docker可能无法正常使用. 测试发现17.09无法正常使用,不 ...
- Kiwi Syslog安装笔记
Kiwi Syslog是一款比较好用日志服务器,采集设备.服务器日志简单又方便,近日试架成功,记录重点部分. 1. 网络设备配置 举例思科: R1#configure t R1(config)#log ...
- 使用Skaffold一键将项目发布到Kubernetes
当前skaffold版本为v0.4,还未发布正式版本,不建议在生产环境中使用: skaffold用于开发人员快速部署程序到Kubernetes中:skaffold提供了dev.run两种模式:使用sk ...
- 守护模式,互斥锁,IPC通讯,生产者消费者模型
'''1,什么是生产者消费者模型 生产者:比喻的是程序中负责产生数据的任务 消费者:比喻的是程序中负责处理数据的任务 生产者->共享的介质(队列)<-消费者 2,为何用 实现了生产者与消费 ...
- JVM服务进程挂掉问题定位查询思路
昨天有朋友咨询了个RegionServer宕机找不到日志无法定位原因的问题,干脆就系统整理下JVM服务宕机的可能原因,方便按照思路去找真正的宕机原因. 1. abort()/halt()/exit() ...
- HTML入门14
HTML表单 这块部分开始强调表单也是用的比较多的部分,好好补漏啊啊啊啊 表单用来做交互,处理所有方面结构到样式,到自定义小部件. form元素,严禁嵌套表单,表单嵌套会使得表单得行为不可预知,引入f ...