返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#命令行参数解析库System.CommandLine使用
  • 707
分享到

C#命令行参数解析库System.CommandLine使用

2024-04-02 19:04:59 707人浏览 泡泡鱼
摘要

命令行参数 平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了

命令行参数

平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。

以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了描述和用法。

系统在创建一个新进程时,会传一个命令行给它,也就是命令行字符串

程序需要对命令行字符串进行解析,并执行相应操作。

如使用sc query可以查询当前系统的服务:

C#中的控制台程序中,Main函数中传入的args字符串数组,就是系统传入进程的命令行参数。

在构建具有复杂命令行参数的控制台程序时 ,手动解析参数就变得非常麻烦。这里推荐一个开源的库,可以更加方便的解析命令行参数。

System.CommandLine介绍

System.CommandLine是一个基于.net Standard 2.0(支持.Net FrameWork 4.6.1.2+和.net core 2.0+)的命令行参数解析库,项目地址https://GitHub.com/dotnet/command-line-api,目前,该项目还是属于beta状态,期待以后的正式版本。

由于不是正式版本,在Nuget中引用时,需要钩上Include prerelease,才能找到这个包。

System.CommandLine的一些基本概念

Token(标记)

命令行的每个单词都是一个标记,如下面的"sc"、"query"和"eventlog"都是一个Token

Commands(命令)

Commands就是应用程序根据Token执行相应的操作(在System.CommandLine库中,对应 Command类)

Root Command(根命令)

根命令是代表可执行程序本身的Commands,如 sc(在System.CommandLine库中,对应RootCommand类)

SubCommands(子命令)

一些命令行程序会有SubCommands,如上面的sc query中的query就是子命令(在System.CommandLine,对应Command类)

Options(可选项)

Options就是传递给Commands的命名参数,如 app -myoption123中的 -myoption 123就是一个Options

Argument(参数)

参数就是传递给选项或命令的值。

说明:

常规的调用如下:

xx.exe [options] <argument> [command]

Delimiters(分隔符)

分隔符就是把Options的命令和值分开的符号

如下三种写法都是一样的,可以使用空格、=或 :符号

app -myoption 123

app -myoption=123

app -myoption:123

Aliases(别名)

可以为命令或选项设置较短的别名,如

-v, --verbose

--o, --option

System.CommandLine使用

在下面的示例中,我们会构建一个简单的控制台爬虫工具。

1、使用Visual Studio 2019创建一个.Net Core控制台程序crawler-line

2、导入System.CommandLine包

3、创建一个RootCommand


var rootCommand = new RootCommand
            {
                new Argument<string>(
                    "url","WEB site url"),
                new Option<bool>(new string[]{ "--gethtml" ,"-html"},"Get html source"),
                new Option<bool>(new string[]{ "--getimage" ,"-image"},"Get images"),
                new Option<bool>(new string[]{ "--regex-option" ,"-regex"},"Use regex"),
                new Option<bool>(new string[]{ "--htmlagilitypack-option", "-agpack"},"Use HtmlAgilityPack"),
                new Option<bool>(new string[]{ "--anglesharp-option", "-agsharp"},"Use AngleSharp"),
                new Option<string>(new string[]{ "--download-path" ,"-path"},"Designate download path"),13             };

说明:

可通过Option类的构造函数重载,为Option指定默认值。


public Option(string alias, Func<T> getDefaultValue, string? description = null);

如上面的-path Option,指定默认值为D:\download,如下:


 new Option<string>(new string[]{ "--download-path" ,"-path"},getDefaultValue:()=>"D:\\download","Designate download path"),

也可以先实例化RootCommand对象,再通过Add的方式添加Argument和Option,如下:


var rootCommand = new RootCommand();
 //添加 Argument
rootCommand.AddArgument(new Argument<string>("url","web site url"));
//添加 Option
rootCommand.AddOption(new Option<string>(new string[] {"--download-path","-path" },"download path"));

4、添加当前命令行程序的描述信息


rootCommand.Description = ".Net Core command-line crawler.";

5、解析Argument和Option


rootCommand.Handler = CommandHandler.Create<string, bool, bool, bool, bool, bool, string>((string url, bool html, bool image, bool regex, bool agpack, bool agsharp, string path) => {
                
            });

如果觉得参数太长,可以封装成类,再进行调用,如下:


public class CrawlerOption
    {
        public string Url { get; set; }
        public bool GetHtml { get; set; }
        public bool GetImage { get; set; }
        public bool RegexOption { get; set; }
        public bool HtmlagilitypackOption { get; set; }
        public bool AnglesharpOption { get; set; }
        public string DownloadPath { get; set; }
    }

rootCommand.Handler = CommandHandler.Create<CrawlerOption>((crawlerOption) =>
            {

            })

6、添加Command并为Command添加处理函数


             //添加 Command
             var githubCommand = new Command("github", "fork me on github");
             //添加 Command的处理函数
             githubCommand.Handler = CommandHandler.Create(() => { System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("cmd", $"/c start Https://github.com/zhaotianff/Crawler-Line")); });
             //将Command添加 到RootCommand
            rootCommand.AddCommand(githubCommand);

说明:

1、RootCommand是顶级命令,RootCommand可以添加Command,Command又可以再添加SubCommand。如此可以无限循环,没有限制 。但建议还是不要添加太多级的Command,调用的时候会不太友好

2、Command和RootCommand原理一样,如果需要为Command添加Argument、Option和Command,可以参照前面的示例

7、调用解析


return rootCommand.InvokeAsync(args).Result;

8、调用示例


#执行github command
crawler-line.exe github
#执行github subcommand
crawler-line.exe github sub
#执行argument option
crawler-line.exe http://www.baidu.com -path "D:\test"

特别提示:

前面示例中,都是为RootCommand添加的Argument和Option,如果又指定 -path(Option),又执行github(Command)肯定会失败。因为github这个命令是RootCommand的子命令,而-path选项是为RootCommand添加的

示例代码

https://github.com/zhaotianff/Crawler-Line/tree/v1.0

以上就是C#命令行参数解析库System.CommandLine介绍的详细内容,更多关于C#命令行参数解析库System.CommandLine的资料请关注编程网其它相关文章!

--结束END--

本文标题: C#命令行参数解析库System.CommandLine使用

本文链接: https://lsjlt.com/news/127505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#命令行参数解析库System.CommandLine使用
    命令行参数 平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了...
    99+
    2024-04-02
  • C#命令行参数解析库System.CommandLine的使用方法
    这篇文章主要介绍了C#命令行参数解析库System.CommandLine的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。命令行参数平常在日常的开发过程中,会经常用到...
    99+
    2023-06-15
  • Python 中使用 argparse 解析命令行参数
    目录1、Python 中的参数解析2、类型3、子命令4、程序架构使用 argparse 模块为应用程序设置命令行选项。 有一些第三方库用于命令行解析,但标准库 argparse 与之...
    99+
    2024-04-02
  • argparse——命令行参数解析
    目录 一、argparse是什么?1.1 一个🌰 二、ArgumentParser2.1 prog2.2 usage2.3 description2.4 epilog ...
    99+
    2023-09-17
    python 开发语言 命令行
  • C语言命令行参数的使用详解
         之前曾经使用过很多次c语言的命令行参数了,但是总是每次使用的时候都不太确定,需要重新查资料,这次来个总结。c语言的命令行参数非常简单...
    99+
    2024-04-02
  • 命令行传递参数argparse.ArgumentParser的使用解析
    目录1.简单示例   2.argparse.ArgumentParser():创建对象3.parser.add_argument():添加参数总结当我们...
    99+
    2023-02-17
    命令行传递参数 argparse.ArgumentParser 解析命令行参数
  • Python命令行参数解析包argparse的使用详解
    目录一、argparse简介二、简单案例三、ArgumentParser参数四、add_argument指令参数解释五、vars()一、argparse简介 argparse 是 p...
    99+
    2024-04-02
  • C语言命令行参数怎么使用
    这篇“C语言命令行参数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言命令行参数怎么使用”文章吧。c语言的命令行...
    99+
    2023-06-17
  • C语言命令行参数如何使用
    C语言中的命令行参数可以通过`main`函数的参数来获取。`main`函数的标准声明为`int main(int argc, cha...
    99+
    2023-08-15
    C语言
  • python argparse命令行参数解析(推荐)
    argparse是python用于解析命令行参数和选项的标准模块。 很多时候,需要用到解析命令行参数的程序,目的是在终端窗口输入训练的参数和选项。 argparse 模块可以让人轻松编写用户友好的命令行接口。 程序定...
    99+
    2022-06-02
    python argparse命令行参数 python 命令行参数
  • java 使用命令行参数(转)
    java 使用命令行参数(转)[@more@]有时你想在运行程序时将信息传递到一个程序中。这通过将命令行参数(command-line arguments )传递给main() 来实现。命令行参数是程序执行时在命令行中紧跟在程序名后的信息。...
    99+
    2023-06-03
  • Python命令行参数解析的实用技巧
    Python命令行参数解析的实用技巧 在使用Python编写脚本时,经常需要从命令行获取参数。Python内置的argparse模块提供了一个简单而强大的实现命令行参数解析的工具。本文将介绍argparse的基本用法,并提供一些...
    99+
    2024-02-03
    命令行参数解析 命令行解析器
  • opatch命令参数解析
    [oracle@slient ~]$ opatch Oracle Interim Patch Installer version 11.2.0.3.4 Copyright (c) 2012, Or...
    99+
    2024-04-02
  • Pythonargparse解析命令行参数模块详情
    目录一、预备知识1、安装2、使用的一般步骤二、实操笔记1、函数详解1.1ArgumentParser1.2add_argument2、调用实例一、预备知识 argparse是pyth...
    99+
    2024-04-02
  • Pytest allure 命令行参数的使用
    先看看 allure 命令的帮助文档 cmd 敲 allure -h allure 命令的语法格式 allure [options] [command] [command ...
    99+
    2024-04-02
  • C#通过System.CommandLine快速生成支持命令行的应用程序
    一直以来,当我们想让我们的控制台程序支持命令行启动时,往往需要编写大量代码来实现这一看起来很简单的功能。虽然有一些库可以简化一些操作,但整个过程仍然是一个相当枯燥而乏味的过程。 今天...
    99+
    2024-04-02
  • C++基于Boost库实现命令行解析
    目录第一次尝试第二次尝试最终版第一次尝试 #include <iostream> #include <boost/program_options.hpp>...
    99+
    2024-04-02
  • python命令行参数详解
    在Python中,可以通过命令行传递参数给脚本。这些参数可以在脚本内部使用,以便根据不同的输入执行不同的操作。Python命令行参数的详解:1、位置参数:在命令行中按照顺序传递给脚本的参数,它们可以在脚本内部通过位置来访问;2、命令行选项:...
    99+
    2023-12-18
    python 命令行
  • 使用Apache commons-cli包进行命令行参数解析的示例代码
    Apache的commons-cli包是专门用于解析命令行参数格式的包。  依赖: <dependency> <groupId>commons-cli</groupId&g...
    99+
    2022-06-04
    apache commons cli commons cli
  • 深入解析Python命令行参数并实例应用
    Python命令行参数详解及实例应用 在Python编程中,我们经常会需要从命令行中获取参数来执行不同的操作。Python内置了一个argparse模块,可以帮助我们解析命令行参数,并根据参数执行不同的逻辑。本文将详细介绍arg...
    99+
    2024-02-03
    实例应用 参数详解 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作