成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Dotnet Core 優雅的命令行實現

開發 前端
控制臺應用 Console,在我們開發中用處很多。小到一個簡單的功能測試,或一組不需要復雜 UI 的工具類應用,大到后端的服務,都會用到 Console。

[[409683]]

本文轉載自微信公眾號「老王Plus」,作者老王Plus的老王。轉載本文請聯系老王Plus公眾號。

前言

控制臺應用 Console,在我們開發中用處很多。小到一個簡單的功能測試,或一組不需要復雜 UI 的工具類應用,大到后端的服務,都會用到 Console。

在這里面,命令行應用 Cli,又是非常典型的一個應用類型。

命令行應用,通常概念上需要我們輸入一定參數,根據參數的不同,選擇不同的程序流程或方法來執行。

舉個簡單的例子:

  1. % python3 
  2. Python 3.9.0 (default, Nov 13 2020, 12:12:14)  
  3. [Clang 12.0.0 (clang-1200.0.32.21)] on darwin 
  4. Type "help""copyright""credits" or "license" for more information. 
  5. >>> import OS 
  6. Traceback (most recent call last): 
  7.   File "<stdin>", line 1, in <module> 
  8. ModuleNotFoundError: No module named 'OS' 
  9. >>> import os 
  10. >>> print("Hello WangPlus"
  11. Hello WangPlus 
  12. >>> exit() 

不需要管 python3 是什么,這不重要。

我們能看到,當進入一個命令行時,一般首先會有簡單的功能介紹,然后是一個提示符,在這里是 >>>。然后可以輸入命令和參數,如果輸入正確,會有錯誤提示。如果輸入正確,會有適當的輸出。

通常,如果想實現這樣的效果,我們需要一個大的循環,來解析和響應輸入的命令和參數,然后進行對應的處理。

事實上,在做這樣一個應用時,會有很大的精力來處理這個循環。不相信的話,可以自己試著寫一寫。

今天給大家介紹的,是一個庫,Nuget 上的庫,也是我最近無意中發現的,但給了我很大的驚喜。事實上,我自己在寫應用時,如果有可能,我會優先采用 Console 或 Cli 的方式來寫,輕量、快速,不用處理太多 UI 方面的工作。

這個庫叫 CommandLineTool。

下面進入正題,我從頭介紹一下這個庫的使用。

創建項目

先來創建項目。老習慣,用命令行創建:

  1. % dotnet new console -o demo -f net5.0 

這兒需要注意一下,這個庫目前支持到 Dotnet Core 5.0,所以我們就用 5.0 了。

然后,引入 CommandLineTool:

  1. % dotnet add package CommandLineTool 

就這樣,工程就算是建完了。

實現功能

這個庫最簡單的地方,是實現起來非常簡單。

第一步,先建一個類

這個類,就是我們要實現 Cli 命令行功能的類 TestCLI:

  1. [App("Demo")] 
  2. public class TestCLI 

類是空的,先不管它。

第二步,在 Program.cs 里加入這個類

  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         Cli cli = new Cli(typeof(TestCLI)) 
  5.         { 
  6.             Introduction = "這是一個 Demo 應用"
  7.             PromptText = "WangPlus"
  8.         }; 
  9.  
  10.         cli.SetCancellationKeys(new() { "exit" }); 
  11.         cli.Start(); 
  12.     } 

看一個加入的內容:

Introduction - 這個 Cli 的說明,提示一下這個程序的功能,隨便寫;

PromptText - 這個是提示符的內容,類似于最上面例子的 >>>;

下面這一句cli.SetCancellationKeys(new() { "exit" });,是定義了退出的命令。也就是說,在提示符后輸入 exit,應用就退出了。

跑一下這個應用:

  1. % dotnet demo.dll 
  2. 這是一個 Demo 應用 
  3.  
  4.  
  5. WangPlus > ? 
  6. '?' was not matched. Did you mean '-h'
  7. Unrecognized command or argument '?' 
  8.  
  9. demo 
  10.   Demo 
  11.  
  12. Usage: 
  13.   demo [options] 
  14.  
  15. Options: 
  16.   --version       Show version information 
  17.   -?, -h, --help  Show help and usage information 
  18.  
  19. WangPlus >exit 
  20. Terminating console... 

哇哈哈,一個簡單的 Cli 架子搭出來了。

第三步,開始寫命令處理

命令處理放在 TestCLI.cs 中。

  1. [App("Demo")] 
  2. public class TestCLI 
  3.     [Command("hello""就是打個招呼")] 
  4.     public static void Hello([ParamArgument()] string name
  5.     { 
  6.         Console.WriteLine($"Hello {name}"); 
  7.     } 

方法還是我們非常熟悉的一個普通方法,并沒有什么特別的。

再跑一下:

  1. WangPlus >hello 
  2. Required argument missing for command: hello 
  3.  
  4. hello 
  5.   就是打個招呼 
  6.  
  7. Usage: 
  8.   demo [options] hello <name
  9.  
  10. Arguments: 
  11.   <name
  12.  
  13. Options: 
  14.   -?, -h, --help  Show help and usage information 
  15.  
  16. WangPlus >hello wang   
  17. Hello wang 

出來效果了。

重點看一下代碼里的幾個部分:

屬性 Command,里面兩個參數,第一個參數就是我們要實現的命令,第二個參數是命令的說明。

方法里,[ParamArgument()] 表示后面跟的參數來自于輸入的命令的參數。

下面還有幾種形式:

  1. //多個參數 
  2. [Command("multiinput""多個參數")] 
  3. public static void MultiInput([ParamArgument()] List<string> names) {} 
  4.  
  5. //多個文件 
  6. [Command("multifile""多個文件")] 
  7. public static void MultiFile([ParamArgument()] List<FileInfo> files) {} 
  8.  
  9. //額外的參數 
  10. [Command("withpara""額外參數")] 
  11. public static void WithPara([ParamArgument()] string names, [ParamOption("-a")] string op1) {} 

重點說一下額外參數的方式。

有時候,我們可能需要下面的方式來處理命令:

  1. % demo -a a-value -b b-value command 

這個方式,就是來解決這樣的問題的。

有沒有 Get 到爽點?

 

本文有配套代碼,在 https://github.com/humornif/Demo-Code/tree/master/0053/demo

 

責任編輯:武曉燕 來源: 老王Plus
相關推薦

2017-08-30 19:11:38

Linux命令行tab

2020-12-10 16:16:08

工具代碼開發

2020-12-11 06:44:16

命令行工具開發

2010-11-16 11:50:21

oracle命令行登錄

2022-04-01 12:51:44

命令Containerd

2015-07-01 09:15:46

linuxQuora命令行

2010-11-24 14:51:55

Mysql命令行

2010-11-16 11:55:31

Oracle命令行

2011-01-18 19:11:26

Postfix命令行

2010-07-15 09:37:47

Perl命令行

2010-09-01 14:23:54

Linux命令行開發

2010-08-20 10:05:23

用戶命令

2009-07-20 09:55:30

華為命令行解析華為認證

2019-07-23 13:45:38

LinuxFedora權限

2010-11-24 15:33:59

mysql命令行參數

2010-03-10 17:23:37

Python 命令行參

2010-07-15 10:47:22

Perl命令行

2012-02-08 16:37:36

ibmdw

2009-12-24 14:51:39

Linux命令行

2010-07-20 14:18:22

Perl命令行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 三级在线观看 | 久久高清国产 | 国产精品国产三级国产aⅴ中文 | 国产精品美女久久久久久不卡 | 精品国产视频 | 视频在线一区 | av中文在线 | 亚洲一区二区三区视频 | 国产中文字幕在线观看 | 国产成人精品午夜 | 欧美一区二区成人 | 亚洲香蕉在线视频 | 亚洲国产18 | 日韩欧美专区 | 日韩欧美在线精品 | 18性欧美 | 国产精品亚洲精品久久 | 国际精品久久 | 中文字幕日韩欧美一区二区三区 | 久久久91 | 国产美女在线看 | 天天久久 | 日本一区二区三区四区 | 欧美一区永久视频免费观看 | 成人毛片在线视频 | 国产精品国产a级 | 免费视频中文字幕 | 欧美精品在线观看 | 中文字幕高清在线 | 国产有码 | 在线看亚洲 | 国产精品1区2区3区 国产在线观看一区 | 国产成人在线播放 | 精品videossex高潮汇编 | 精品国产一区二区三区观看不卡 | 日韩欧美大片在线观看 | 台湾a级理论片在线观看 | 久久久久久久久淑女av国产精品 | 一区二区在线 | 中文字幕日韩欧美一区二区三区 | 综合九九 |