世界信息:Spectre.Console-实现自己的CLI
最近发现自己喜欢用的 Todo 软件总是差点意思,毕竟每个人的习惯和工作流不太一样,我就想着自己写一个小的Todo 项目,核心的功能是自动记录 Todo 执行过程中消耗的时间(尤其面向程序员),按照自己的想法实现一套 GTD
工作流。
不想写 Winform
,WPF
也写腻了,就想着学学 MAUI
、Avalonia
、Uno Platform
、blazor
之类的。由于前端技术选型纠结,迟迟动不了手,想想还是暂时先不弄了。但为了测试,没有个界面总是不太行,先搞一个 CLI 吧。
Spectre. Console更新:由于想让程序持续执行,所以后面还是替换了 CLI 。
(资料图片仅供参考)
Spectre.Console(spectreconsole.net) 是一个美化 Console 输出的类库,通过它可以实现丰富多样的 Console 输出。核心的特性有这些:
格式化输出文本(支持斜体等)支持对文字着色渲染复杂的组件(表格、结构树、ASCII 图片)显示进度条与状态强类型输入验证对 exception 输出着色除此以外,它还提供了一个 Spectre.Console.Cli
类库,可以帮助我们实现类似 dotnet
、git
之类的 CLI(Command Line Interface)。
这里使用官方的示例:
var app = new CommandApp();return app.Run(args);internal sealed class FileSizeCommand : Command{ public sealed class Settings : CommandSettings { [Description("Path to search. Defaults to current directory.")] [CommandArgument(0, "[searchPath]")] public string? SearchPath { get; init; } [CommandOption("-p|--pattern")] public string? SearchPattern { get; init; } [CommandOption("--hidden")] [DefaultValue(true)] public bool IncludeHidden { get; init; } } public override int Execute([NotNull] CommandContext context, [NotNull] Settings settings) { var searchOptions = new EnumerationOptions { AttributesToSkip = settings.IncludeHidden ? FileAttributes.Hidden | FileAttributes.System : FileAttributes.System }; var searchPattern = settings.SearchPattern ?? "*.*"; var searchPath = settings.SearchPath ?? Directory.GetCurrentDirectory(); var files = new DirectoryInfo(searchPath) .GetFiles(searchPattern, searchOptions); var totalFileSize = files .Sum(fileInfo => fileInfo.Length); AnsiConsole.MarkupLine($"Total file size for [green]{searchPattern}[/] files in [green]{searchPath}[/]: [blue]{totalFileSize:N0}[/] bytes"); return 0; }}
结构非常简单,标有 [CommandOption("xxx")]
会自动将参数归类,通过下列命令进行调用。
app.exeapp.exe c:\windowsapp.exe c:\windows --pattern *.dllapp.exe c:\windows --hidden --pattern *.dll
多命令上面这个示例只支持一个默认的命令,但是一般的 CLI 都有很多支持的命令,需要调整一下实现:
var app = new CommandApp();app.Configure(config =>{ config.AddCommand("add"); config.AddCommand("commit"); config.AddCommand("rebase");});
层级命令更复杂一点的,比如 dotnet add package
和 dotnet add reference
这种,add 后面还有 package 这个子命令,上面的方法还得继续拓展,首先定义 add 基类和 package 与 reference 继承类。
public class AddSettings : CommandSettings{ [CommandArgument(0, "[PROJECT]")] public string Project { get; set; }}public class AddPackageSettings : AddSettings{ [CommandArgument(0, "")] public string PackageName { get; set; } [CommandOption("-v|--version ")] public string Version { get; set; }}public class AddReferenceSettings : AddSettings{ [CommandArgument(0, "")] public string ProjectReference { get; set; }}
然后对不同的命令,指定不同处理函数。
public class AddPackageCommand : Command{ public override int Execute(CommandContext context, AddPackageSettings settings) { // Omitted return 0; }}public class AddReferenceCommand : Command{ public override int Execute(CommandContext context, AddReferenceSettings settings) { // Omitted return 0; }}
最后使用 AddBranch 进行组合:
using Spectre.Console.Cli;namespace MyApp{ public static class Program { public static int Main(string[] args) { var app = new CommandApp(); app.Configure(config => { config.AddBranch("add", add => { add.AddCommand("package"); add.AddCommand("reference"); }); }); return app.Run(args); } }}
参考Spectre.Console - Introduction (spectreconsole.net)
标签:
相关文章
世界信息:Spectre.Console-实现自己的CLI
引言最近发现自己喜欢用的Todo软件总是差点意思,毕竟每个人的习惯和工作流不太一样,我就想着自己写一个
湖南永州:“套餐式”帮扶筑牢防返贫“保障线” 环球新动态
“如今有了工作队的帮助,再也不用担心马蹄的产量和销路了。”来自湖南省永州市江永县源口瑶族乡七工岭村村
股市早8点丨金针探底·四条大长腿·上方两个缺口近期就补
金针探底·四条大长腿·上方两个缺口近期就补股市早8点老沙自媒体2023年5月31日(周三)每日正道大道消息▊
蒂勒曼斯很大可能已经离开球队,他去了法国。jor...
蒂勒曼斯很大可能已经离开球队,他去了法国。jorgenicola消息,特特在莱斯特已经没有未来可言,他将离开球
紫金矿业公告,近日,公司控股子公司西藏巨龙铜业有限公司收到墨竹工卡县应急管理局函复,同意巨龙铜业恢复生产-每日看点
紫金矿业公告,近日,公司控股子公司西藏巨龙铜业有限公司收到墨竹工卡县应急管理局函复,同意巨龙铜业恢复
【世界新要闻】光遇安卓和苹果可以一起玩吗_光遇安卓和苹果一起玩行不行
欢迎观看本篇文章,小升来为大家解答以上问题。光遇安卓和苹果可以一起玩吗,光遇安卓和苹果一起玩行不行很
全球新动态:一年级快期末考试了怎么辅导(一年级快期末考试了转学好吗)
每日小编都会为大家带来一些知识类的文章,那么今天小编为大家带来的是一年级快期末考试了转学好吗方面的消
社保基金会设立“社保基金中关村自主创新专项基金” 首期规模50亿元
上证报中国证券网讯(记者韩宋辉)记者获悉,在5月30日举办的2023中关村论坛重大科技成果专场发布活动上,
喜欢钻牛角尖的人性格(钻牛角尖的人心理分析是什么)-环球时讯
大家好,小乐来为大家解答以上的问题。喜欢钻牛角尖的人性格,钻牛角尖的人心理分析是什么这个很多人还不知
梅州城区或市郊有什么好玩的景点梅州城区或市郊有什么好玩的景点有哪些_天天短讯
1、客天下景区。客天下是集客家文化、客家饮食、旅游、居住、购物、休闲为一体的客家小镇,文化浓郁,风情
环球报道:电网再添一座“超级充电宝” 同时满足5000户家庭1天用电
本报讯(记者惠玉兰)据国网苏州供电公司消息,经过紧张的并网调试工作,位于张家港的乐余储能电站日前
焦点短讯!雅芳魅惑系列香水 化身破晓猎人的旷野男香 一秒陷入激情魅力
优雅百年的香氛世家雅芳,始终坚守在对香氛的研制上,无论是开始的“小圆点香水”还是经典的小黑裙系列香水
记者:梅西不会回巴萨,俱乐部找不到合适的解决方案
直播吧5月30日讯塞尔电台记者SiqueRodriguez今天在节目中表示,梅西不会返回巴萨。这位记者说道:“原则上
爱建集团(600643.SH):获得政府补助7367.41万元-世界通讯
格隆汇5月30日丨爱建集团(600643 SH)公布,2023年2月10日至2023年5月29日期间,爱建集团及其下属子公司累计
诺唯赞跌2.38% 2021年上市超募9亿元 环球信息
中国经济网北京5月30日讯诺唯赞(688105 SH)今日股价下跌,截至收盘报34 90元,跌幅2 38%,总市值139 60亿元
连发两份重磅文件!北京要推动国产人工智能芯片实现突破 当前速递
本文由半导体产业纵横(ID:ICVIEWS)综合积极引导大模型研发企业应用国产人工智能芯片,加快提升人工智能算