使用Spectre.Console创建漂亮的控制台应用程序

前言

你是否厌倦了控制台应用程序默认的简陋界面?

e3705536017f5846b850567a36fb4e82.png

这时,你可以试试引用Nuget包Spectre.Console

打印使用帮助

首先,我们可以设置控制台应用程序可以执行的命令:

static async Task<int> Main(string[] args)
{var app = new CommandApp();app.Configure(config =>{config.AddCommand<DemoCommand>("demo");config.AddCommand<AnotherCommand>("another");});return await app.RunAsync(args);
}

然后,为每个命令指定参数:

public class DemoCommandSettings : CommandSettings
{[CommandOption("-u|--username")][Description("需要显示的名称")]public string Name { get; set; }
}

最后,实现命令:

public class DemoCommand : AsyncCommand<DemoCommandSettings>
{public override Task<int> ExecuteAsync(CommandContext context, DemoCommandSettings settings){Console.WriteLine($@"Hello {settings.Name}!");return Task.FromResult(0);}
}

a08e6e2adf6bf1a74afc789453de4f1e.png

可以看到,Spectre.Console自动生成了帮助信息,指导用户如何使用。

与用户交互

我们还可以运行命令时询问用户,进行一定的交互输入:

var name =settings.Name?? AnsiConsole.Ask<string>("What's your [green]name[/]?");
Console.WriteLine($@"Hello {name}!");

c8c3729b60028e120108e055bfcaa082.gif

显示信息

当我们从用户那里收集完信息后,可以让用户检查信息,以确保所有信息输入正确。例如,我们可以以表格格式呈现摘要:

do
{name = AnsiConsole.Ask<string>("What's your [green]name[/]?");var table = new Table();table.AddColumn("参数");table.AddColumn(new TableColumn("值").Centered());table.AddRow("-u", $@"[green]{name}[/]");AnsiConsole.Write(table);
} while (!AnsiConsole.Confirm("输入是否正确?"));

8a5caaa9c7cd2bb168fd87eff07a1d50.gif

报告进度

在执行命令时,可以显示进度来告诉用户工作完成的百分比:

await AnsiConsole.Progress().StartAsync(async ctx =>{ var task1 = ctx.AddTask("执行中......");while (!ctx.IsFinished){// 模拟工作耗时await Task.Delay(100);task1.Increment(1);}});

f81f9eec69b2f764a5aa7e8b00aa10b0.gif

结论

正如我在开始时提到的,使用Spectre.Console可以创建出漂亮的控制台应用程序,更多功能请参看官方文档:https://spectreconsole.net/

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

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

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

相关文章

Boosting集合算法详解(一)

本文是关于聚类算法的第二篇K-means&#xff0c;感兴趣的同学可以前往http://ihoge.cn/2018/clustering.html 阅读完整版。 二、K-means 1. 算法步骤 <1> 选择KK个点作为初始质心 <2> Repeat: <3> 将每个点指派到最近的质心,形成K" role="pre…

一款不错的网站压力测试工具webbench

webbench最多可以模拟3万个并发连接去测试网站的负载能力  1、适用系统&#xff1a;Linux  2、编译安装&#xff1a; wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gztar zxvf webbench-1.5.tar.gzcd webbench-1.5make && make installUnbun…

WindowsPhone8可缩放图片控件的实现

xaml中添加: <ViewportControl x:Name"viewport" DoubleTap"OnDoubleTap"ManipulationStarted"OnManipulationStarted" ManipulationDelta"OnManipulationDelta" ManipulationCompleted"OnManipulationCompleted" Viewpo…

python导入自定义模块_Python3 导入自定义的包

什么是包&#xff1f; 要想知道什么是包&#xff0c;得先了解一下模块的概念。 模块是一个包含所有你定义的函数和变量的文件&#xff0c;其后缀名是 .py。模块可以被别的程序引入&#xff0c;以使用该模块中的函数等功能。 知道了模块&#xff0c;那紧接着看看包&#xff1a; …

Android之ComponentName的用法

ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的、 ComponentName,顾名思义,就是组件名称,通过调用Intent中的setComponent方法,我们可以打开另外一个应用中的Activity或者服务。 实例化一个ComponentName需要两个参数,第一个参数是要启动应用的包…

Linux入门之进程管理(4)之进程与文件

Linux入门之进程管理(4)之进程与文件前面使用进程相关命令管理工具都是根据进程编号或者进程名称及其其它属性信息来查看和处理相关进程的&#xff0c;但是在某些情况下&#xff0c;想要查看某个文件或者某个设备被哪些进程所使用&#xff0c;使用ps、pgrep等命令查询的是不够准…

巧用Hive自带函数进行多字段分别去重计数统计

巧用Hive自带函数进行多字段分别去重计数统计 1-group by 和 distinct 大前提&#xff1a;大表统计能使用group by就不要使用distinct&#xff01;&#xff01; 尤其是在数据量非常大的时候&#xff0c;distinct会将所有的统计信息加载到一个reducer里取执行&#xff0c;这就是…

初识MASA Blazor

MASA Blazor是一个Blazor的UI组件库。就像大家写前端熟知的Bootstrap, Ant Design一样。MASA Blazor官网地址&#xff1a;https://blazor.masastack.comMASA Blazor Github地址&#xff1a;https://github.com/BlazorComponent/MASA.BlazorMASA Blazor Pro演示地址&#xff1a;…

Thread.sleep还是TimeUnit.SECONDS.sleep

刚看到TimeUnit.SECONDS.sleep()方法时觉得挺奇怪的&#xff0c;这里怎么也提供sleep方法&#xff1f;public void sleep(long timeout) throws InterruptedException {if (timeout > 0) {long ms toMillis(timeout);int ns excessNanos(timeout, ms);Thread.sleep(ms, ns…

win7技巧

win7鼠标右键菜单清理 win7右键菜单设置 |浏览&#xff1a;7659|更新&#xff1a;2014-03-04 14:23|标签&#xff1a; windows7 鼠标 1234567分步阅读虽然我们现在打开某个软件都是双击解决完事&#xff0c;但是偶尔我们需要右键属性的时候&#xff0c;可以看到右键菜单拖拖拉拉…

shell基础一

Shell支持自定义变量。 定义变量 定义变量时&#xff0c;变量名不加美元符号&#xff08;$&#xff09;&#xff0c;如&#xff1a; variableName"value" 注意&#xff0c;变量名和等号之间不能有空格&#xff0c;这可能和你熟悉的所有编程语言都不一样。 同时&…

python画方波_python实现周期方波信号频谱图

在学习傅里叶变换的时候遇到了求周期方波信号频谱图的例子&#xff0c;在书上和网上查阅了一些资料&#xff0c;发现大都是讨论的都是下图左边的周期信号的频谱&#xff0c;课程老师的PPT中也只列出了另一种周期信号频谱图的结论&#xff0c;没有在进行傅里叶变换&#xff0c;自…

基于Python的电商平台淘宝商品评论数据采集与分析

引言 在电商竞争日益激烈的情况下&#xff0c;商家既要提高产品质量&#xff0c;又要洞悉客户的想法和需求&#xff0c;关注客户购买商品后的评论&#xff0c;而第三方API接口商家获取商品评价主要依赖于人工收集&#xff0c;不但效率低&#xff0c;而且准确度得不到保障。通过…

《Pyflink》Flink集群安装,Python+Flink调研

Flink集群安装&#xff0c;PythonFlink调研 Flink集群部署 下载对应版本安装包&#xff1a;https://flink.apache.org/downloads.html 实验环境为hadoop2.7&#xff0c; scala2.11 所以下载flink-1.7.1-bin-hadoop27-scala_2.11.tgz 配置conf/flink-conf.yaml jobmanager.rpc…

项目手札2---关于分页显示时地址栏的风格

在控制器里&#xff0c;用RequestMapping("")时我们可能用RESTFUL风格的来映射&#xff0c;也有可能是用其他的方式&#xff0c;用或不用RESTFUL风格在分页显示时的地址栏里有些不同。首先来看不用RESTFUL时地址栏的样子&#xff1a; <li><a href"show…

shell基础二

前面已经讲到&#xff0c;变量名只能包含数字、字母和下划线&#xff0c;因为某些包含其他字符的变量有特殊含义&#xff0c;这样的变量被称为特殊变量。例如&#xff0c;$ 表示当前Shell进程的ID&#xff0c;即pid&#xff0c;看下面的代码&#xff1a; $echo $$ 运行结果 29…

hdu 4539(状压dp)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4539 思路&#xff1a;跟poj1185简直就是如出一辙&#xff01; 1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<algorithm>5 using namespace std;6 7 int row…