精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

命令行工具開發:如何快速實現命令行提示?

開發 前端
本文分享一種 快速實現的方法, 使用YAML文件定義命令行工具的使用規 范,再通過工具自動生成各種shell的命令行提示腳本,最后分享一些至關重要的 命令行解析器。

  [[356927]]

阿里妹導讀:對于稍微復雜一些的命令行工具,命令行的提示功能必不可少。那么對于不同語言的開發者,有沒有一種簡單快捷的實現方式呢?本文分享一種 快速實現的方法, 使用YAML文件定義命令行工具的使用規 范,再通過工具自動生成各種shell的命令行提示腳本,最后分享一些至關重要的 命令行解析器。

不少同學喜歡開發命令行工具,主要是開發快捷,而且和其他命令行工具配合,借助腳本,非常容易實現一些任務的自動化。命令行工具開發比較簡單, 以Java舉一個例子 ,通常我們只需要一個命令行參數解析器,如Java,就有args4j, jopt,picocli等,轉換為結構化的對象,根據輸入的參數進行相關的邏輯判斷,完成對應的邏輯。其他如Node.js, Deno, Python等,也是一樣的流程,都有命令行參數解析器,然后基于命令行輸入執行對應的邏輯。

一  命令行提示

如果命令行工具稍微復雜一些,那么必須要提供對應的命令行提示,不然開發者幾乎沒法使用。舉一個例子,阿里云有對應的命令行工 具aliyun-cli[1], 下載安裝后就可以使用aliyun命令行工具了。執行  aliyun --help ,會發現非常多的子命令,如果沒有命令行工具提示,開發者使用這個工具就非常復雜,要去查文檔,或者通過命令行的help來輸入命令。

aliyun的命令行工具也提供了對應的代碼提示,如下所示:

這個命令行提示還不錯,你只需要選擇對應的子命令然后再進行提示就可以了。

大多數開發者喜歡帶描述的命令行提示。并不是所有的子命令和命令參數都命名得非常好,如aliyun命令行給出的live子命令提示,大家可能完全不知道這個live是什么 (當然,作為阿里云的同學,我還是知道的, live是視頻直播)。而像如下包括描述的命令行提示就直觀很多:

二  生成命令行提示

這里不再介紹bash,zsh,fish等各種shell的命令行提示的機制,沒有人會手動編寫這些命令行提示腳本,大家都會使用框架生成對應shell的命令行提示腳本。

我找了一些命令行解析框架,并且能自動生成命令行提示的,如Java的picocli,Node.js的commander.js,Python的argparse,以及Rust的clap-rs等。我都嘗試了一下,最終發現還是clap-rs生成的命令行提示比較好,就是我說的那種帶描述,而且還有文件名和目錄自動提示,枚舉值的提示等,關鍵是也非常簡單。如果有同學有更好的命令行解析框架,希望能留言分享一下。

那么如何讓其他語言,如Node.js,Java,Python這些語言編寫的命令行工具也能實現和clap-rs的命令行提示一樣的效果呢?

三  clap-rs的命令行YAML文件

clap-rs包含了一個命令行工具的YAML規范。我們都知道命令行工具交互比較簡單,主要就兩個部分:參數和子命令。你看到類似 --conf xxx.yaml 這些帶參數名的都屬于參數,也可以省略參數名,如 convert a.jpg a.png 其中的a.jpg和a.png也都是參數。子命令就比較容易理解了,我們每天使用的git就是大量使用子命令的,如 git add xxx.jpg 這些。當子命令還可以繼續套用子命令,子命令同時也擁有自己的參數。

基于命令行這樣的特性,我們完全可以將命令行工具的使用規范通過YAML描述出來,現在一切皆可YAML。

這里我給出一個阿里云命令行工具的YAML定義,當然只是demo。如下:

  1. name: aliyun2 
  2. version: "0.1.0" 
  3. about: "cli for Alibaba Cloud" 
  4. args: 
  5.   - version: 
  6.       short: v 
  7.       long: version 
  8.       takes_value: false 
  9.       about: Display version 
  10. subcommands: 
  11.   - oss: 
  12.       about: 對象存儲 
  13.       subcommands: 
  14.         - cat: 
  15.             about: cat文本文件 
  16.             args: 
  17.               - file: 
  18.                   takes_value: true 
  19.                   required: true 
  20.                   about: 文件名稱 
  21.         - ls: 
  22.             about: list文件 
  23.   - ecs: 
  24.       about: 云服務器 
  25.       subcommands: 
  26.         - SendFile: 
  27.             about: send file 
  28.         - AddTags: 
  29.             about: add tags 

可以看出,我首先定義了兩個子命令:oss和ecs,然后oss子命令下我又定義了兩個子命令:cat和ls。對于oss的cat子命令,我又添加了file這個參數,這樣我就可以使用cat來查看oss上文本文件的內容。

有了這個命令行工具YAML規范定義后,我就可以調用clap-rs提供的命令行工具接口,生成對應的shell的提示腳本。效果如下:

這個命令行提示的效果是不是比原先的要好多了?提示有了描述,選擇子命令和參數的時候就簡單多了。

四  為所有命令行工具寫YAML

講到這里,相信大家都明白了。無論這個工具是Java,Python,Node.js還是Rust編寫的,首先定義好該工具的YAML規范,接下來開發人員根據該規范去編寫代碼,他可以選擇他喜歡的語言,他喜歡的命令行解析器,然后實現對應的功能即可。沒有代碼提升,編寫YAML文件不出錯是非常難的,所以我做了一個JSON Schema[2]文件,在編寫YAML文件時可以進行代碼提示,做到編寫命令行YAML規范文件更加簡單。 JSON Schema 的使用方法如下:

接下來我們會基于該YAML文件,為各種shell生成對應的命令行提示腳本,如bash,zsh,fish和powershell,這樣分開后,開發人員也不需要去處理那些他不清楚的命令行提示,或者找該編程語言對應的SDK來做命令行代碼提示。如果沒有怎么辦?即便有了,生成的提示非常簡單怎么辦?畢竟命令行工具提示非常重要。

相信Node.js的開發者也不希望還要學習一下Rust和clap-rs,這樣就太不高效了。因此我又編寫了一個工具cli-completion[3],  其主要目的根據上面說的YAML文件幫你自動生成各種shell的命令行提示腳本。來看一下zsh的例子:

  1. $ cli-completion --zsh commands/aliyun2.yaml > /usr/local/share/zsh/site-functions/_aliyun2 
  2. $ autoload -U compinit && compinit 

再看一下oh-my-zsh的例子:

  1. $ mkdir ~/.oh-my-zsh/custom/plugins/aliyun2  
  2. $ cli-completion --zsh aliyun2.yaml >  ~/.oh-my-zsh/custom/plugins/aliyun2/_aliyun2 

通過這種方式,cli-completion可以為任何命令提供命令行提示。也就是說,以后,你只要編寫命令行邏輯,關于命令行提示的問題,全部交給cli-completion幫你生成即可。當然考慮到用戶體驗,你可能需要在命令行工具中,將cli-completion生成的腳本,通過某一子命令,快速同步到客戶端環境。

命令行的開發流程:YAML規范編寫,命令行提示自動生成,開發人員下班前完成功能實現。

有同學可能會問,我能否基于YAML文件,并結合某一命令行解析框架,自動完成整個應用的骨架生成,這完全可以,開發人員只要實現一些函數即可,開發會更簡單。我個人認為使用PicoCli這些框架自動生成代碼,是完全沒有問題的。

五  將cli-completion FaaS化

這個功能大家一年都未必用上兩次,費時安裝也挺麻煩的。現在不是到處都是FaaS,我們也可以嘗試一下。首先cli-completion是用Rust編寫的,所以可以用傳統的方式編寫Rust Cloud Lambda,然后部署到云服務上,另外也可以寫一個Rust Web應用,如用actix-web,也非常簡單。

這些都不夠時髦,我們打算將cli-completion的代碼WebAssembly化,然后以FaaS方式部署,這里我選擇CloudFlare作為FaaS的運行平臺。讓我們來看一下Demo。

創建一個cli.yaml文件,如下:

  1. name: cli1 
  2. version: "0.1.0" 
  3. about: "CLI completion for bash, zsh, fish and powershell." 
  4. args: 
  5.   - help: 
  6.       short: h 
  7.       long: help 
  8.       takes_value: false 
  9.       about: Display this help 

然后調用cli-completion的FaaS服務,就可以得到對應的命令行提示腳本代碼。命令如下:

  1. curl -H 'Content-Type: application/x-yaml' --data-binary "@cli.yaml" https://cli-completion.linux-china.workers.dev/completion/zsh 

對比傳統的cloud lambda或者cloud function,這種方式FaaS響應速度最快,這種服務調用次數非常少,基本就是每次請求都是冷啟動,而WebAssembly這方面就非常有優勢。

當然還有一個最大的原因:就是WebAssembly方式的FaaS,它最便宜。

題外話探討一下cloudflare的WebAssmebly的實現,純技術討論,代碼如下:

  1. async function handleRequest(request) { 
  2.     const { greet } = wasm_bindgen 
  3.     await wasm_bindgen(wasm) 
  4.     const greeting = greet() 
  5.     return new Response(greeting, {status: 200}) 

上述代碼中,wasm是一個WebAssembly.Module對象,它是從外部注入的,而不是開發者寫的,是FaaS生成的。接下來就是從wasm_bindgen這個函數中獲取wasm的導出函數,然后調用 wasm_bindgen(wasm) 將greet函數和wasm module中的export函數進行關聯,然后調用greet就會轉到wasm module的調用。如果是這樣的話,WebAssembly.Module其實是可以外部管理的,當有請求時,再和JavaScript的函數進行關聯,這樣就可以保證WebAssembly的快速響應。

六  總結

以后大家在寫命令行工具時,不用再擔心代碼提示的問題了。在動手開發工具前,寫一下YAML文件,整理和厘清一下你的思路,有哪些子命令,有哪些參數等,然后再基于該YAML文件進行開發,使用什么語言都沒有關系,最后配合cli-completion完成命令行提示,你的命令行工具算是相當專業的了,至少從面子上看起來是的 :)

最后列出一些命令行應用涉及的至關重要的命令行解析器,方便大家后續參考:

  • Java:Picocli, JCommander, JOpt, kotlinx-cli, JLine, args4j

  • Node.js : Commander.js, clap.js, minimist, yargs[4 ]

  • Deno : yargs

  • Python : argparse, docopt, cli-args, clap

  • Golang : argparse, flaggy

  • Rust : clap-rs, pico-args, paw

  • Ruby : cmdparse, commander, GLI

  • C++ : gflags, cli, docopt.cpp

 

 

責任編輯:張燕妮 來源: 阿里技術
相關推薦

2020-12-11 06:44:16

命令行工具開發

2019-07-23 13:45:38

LinuxFedora權限

2019-08-05 12:20:30

命令行Linux權限進階

2023-06-09 07:45:29

Kuberneteskubectl

2018-05-04 09:15:35

PythonPlumbum命令行

2010-09-01 14:23:54

Linux命令行開發

2011-01-18 19:11:26

Postfix命令行

2010-11-24 17:12:17

MySQL命令行

2013-12-09 14:29:13

OpenStack命令行工具API

2015-07-01 09:15:46

linuxQuora命令行

2010-11-16 11:50:21

oracle命令行登錄

2018-02-10 17:30:41

Linux命令

2023-10-30 01:00:42

Go語言Cobra庫

2013-05-21 14:58:08

系統監視glances開源

2019-08-27 10:32:01

Linux操作系統Windows

2013-11-15 09:43:15

JDK工具

2021-12-06 11:38:17

命令Glances工具

2022-11-18 12:47:51

LinuxAWS命令行工具

2009-02-17 23:21:12

autojump命令行下快速更改目錄

2023-03-31 08:44:55

Go開發命令
點贊
收藏

51CTO技術棧公眾號

国产综合色产| 亚洲av综合色区无码一区爱av | 日韩毛片在线播放| 亚洲精品播放| 欧美丰满少妇xxxxx高潮对白| av中文字幕av| wwwwww在线观看| 羞羞答答成人影院www| 亚洲成色www8888| 天天干天天玩天天操| 都市激情久久综合| 国产精品毛片久久久久久久 | 国产精品对白| 欧美性xxxx在线播放| 五月天av影院| 邻家有女韩剧在线观看国语| 国产尤物一区二区| 国产精品大片wwwwww| 黑鬼狂亚洲人videos| 97精品国产99久久久久久免费| 亚洲欧美怡红院| 久久综合久久久| www.激情五月| 美女国产一区二区| 2019中文字幕在线免费观看| 91麻豆精品成人一区二区| 日韩精品福利一区二区三区| 欧美一区二区三区免费视频| av免费在线播放网站| 精品日韩av| 亚洲欧美偷拍另类a∨色屁股| 免费成人深夜夜行视频| 丰满少妇一级片| 激情亚洲成人| 久久精品国产亚洲精品| 好吊视频在线观看| 97久久综合区小说区图片区| 亚洲精品成人精品456| 成人免费淫片aa视频免费| 久久久久99精品成人片我成大片| 欧美a一欧美| 婷婷综合五月天| 欧美成人蜜桃| 欧美一级淫片aaaaaa| 国产精品一区二区三区99| 国产精品久久久久久久久久久不卡 | 国产情侣免费视频| 久久精品日韩欧美| 午夜精品一区二区三区在线视| 91插插插插插插| 99久久久久久中文字幕一区| 在线成人中文字幕| 久久亚洲无码视频| 国产麻豆精品久久| 欧美日韩在线直播| 日韩精品免费播放| 欧美aaa视频| 欧美曰成人黄网| 欧美日韩怡红院| 99蜜月精品久久91| 欧美午夜在线一二页| 日韩av片网站| 4438x成人网全国最大| 国产精品久久久一区麻豆最新章节| 日韩电影免费观看在| 成年女人的天堂在线| 国产精品入口麻豆原神| 一区二区三区我不卡| 成人在线观看亚洲| 亚洲愉拍自拍另类高清精品| 成年人看的毛片| 美女视频在线免费| 在线免费亚洲电影| 最新天堂在线视频| 欧一区二区三区| 一本大道久久a久久综合| 午夜啪啪免费视频| 午夜激情在线| 偷拍日韩校园综合在线| 激情综合网俺也去| 亚洲国产综合在线观看| 日韩精品一区二区三区在线| 成人免费看片载| 伊人久久大香线蕉无限次| 亚洲区一区二区| 日本不卡一二区| 一区二区三区韩国免费中文网站| 亚洲欧美制服丝袜| 国产乱子轮xxx农村| 狠狠爱www人成狠狠爱综合网| 98精品国产高清在线xxxx天堂| 麻豆成人免费视频| 国产综合久久久久久鬼色 | 国产欧美日韩综合精品一区二区| 亚洲欧洲一区二区| 国产一线二线在线观看| 色美美综合视频| 国产精品igao网网址不卡| 欧美不卡高清一区二区三区| 欧美人伦禁忌dvd放荡欲情| 三级网站免费看| 亚洲欧洲美洲国产香蕉| 久热精品视频在线观看一区| 国产情侣在线视频| 精品一区二区三区的国产在线播放| 99re视频在线观看| 国产一二在线观看| 亚洲午夜羞羞片| 色综合天天色综合| 久久99精品国产自在现线| 中文字幕日韩电影| 日本少妇全体裸体洗澡| 久久精品国产**网站演员| 韩日午夜在线资源一区二区 | 欧美一区二区美女| 亚洲午夜福利在线观看| 欧美在线日韩| www国产精品视频| 日韩黄色一级大片| 国产主播一区二区| 四虎一区二区| 操人在线观看| 日韩欧美一级特黄在线播放| 久久美女免费视频| 伊人激情综合| 91传媒免费看| 精品国产一级片| 国产日韩欧美麻豆| 国产极品粉嫩福利姬萌白酱| 视频精品一区二区三区| www.精品av.com| 日本精品入口免费视频| 97久久超碰国产精品电影| 蜜臀在线免费观看| 色综合视频一区二区三区44| 亚洲色图激情小说| 欧美精品二区三区| 粉嫩嫩av羞羞动漫久久久| 在线国产伦理一区| 成人黄色在线| 亚洲欧美日韩精品久久奇米色影视| 国产在线视频你懂的| 国产制服丝袜一区| 美女在线免费视频| 天堂综合在线播放| www国产精品视频| 国产又黄又粗又猛又爽| 亚洲欧洲国产日韩| 亚洲欧美日韩三级| 性欧美欧美巨大69| 亚洲综合社区网| 国产在线观看av| 欧美一区二区女人| 国产一级aa大片毛片| 成人精品亚洲人成在线| 妞干网在线播放| 黑人久久a级毛片免费观看| 久久久久久12| 免费看国产片在线观看| 亚洲国产精品久久人人爱蜜臀| 妞干网在线观看视频| 欧美xnxx| 欲色天天网综合久久| 综合久久中文字幕| 国产精品久久久久久久久搜平片 | 中文网丁香综合网| 亚洲国产91视频| 欧美日韩999| 四虎永久在线观看| 欧美日韩在线另类| 天天干天天舔天天操| 免费的国产精品| 亚洲天堂第一区| 国产精品毛片久久久| 欧日韩不卡在线视频| 91久久久久国产一区二区| 国产精品国产三级国产aⅴ原创| 加勒比av中文字幕| 欧美日本三区| 欧美12av| 91精品视频一区二区| 欧美激情在线播放| 欧美成人免费| 在线成人免费视频| 日本在线视频免费| 国产日韩精品一区| 国产不卡的av| 一区二区国产在线观看| 午夜精品区一区二区三| 亚洲成人五区| 欧美专区日韩视频| 黄a在线观看| 日韩不卡中文字幕| 亚洲一级黄色大片| 亚洲午夜一二三区视频| 国产成人免费观看网站| 一本久道久久综合婷婷鲸鱼| 欧洲久久久久久| 国产精品日韩精品在线播放| 欧美野外猛男的大粗鳮| 国产高清一区二区三区视频 | 日韩女优在线视频| 丝袜诱惑制服诱惑色一区在线观看| 最新不卡av| 美女精品一区最新中文字幕一区二区三区| 国产精品专区第二| 超碰99在线| 久久国产精彩视频| 成人精品福利| 日韩成人黄色av| aaa国产视频| 欧美私模裸体表演在线观看| 久久免费公开视频| 一区二区中文视频| www.狠狠爱| 99热精品一区二区| 亚洲五月激情网| 青青草国产精品97视觉盛宴| heyzo亚洲| 国产精品分类| 手机看片日韩国产| 日韩欧美综合| 欧美人xxxxx| 九色porny自拍视频在线播放| 中文字幕无线精品亚洲乱码一区 | 在线a欧美视频| 亚洲色图欧美视频| 精品国产免费人成在线观看| 国产片高清在线观看| 欧美色爱综合网| 男人天堂2024| 精品久久香蕉国产线看观看亚洲| 印度午夜性春猛xxx交| 中文字幕中文字幕一区| 一区二区黄色片| 久久久三级国产网站| 国产黑丝一区二区| 成人h动漫精品一区二区| 无码人妻少妇色欲av一区二区| 久久99精品久久久久婷婷| 牛夜精品久久久久久久| 免费观看30秒视频久久| 久久综合伊人77777麻豆最新章节| 国产精品一卡| 午夜精品久久久内射近拍高清| 国产精品美女| 欧美亚洲另类色图| 麻豆成人精品| 人妻无码视频一区二区三区| 日韩精品免费专区| www.午夜色| 99热国内精品| 中文字幕乱码一区二区三区| 国产精品99一区二区三区| 亚洲欧美日韩精品综合在线观看 | 91成人在线视频观看| 亚洲91视频| 国产激情片在线观看| 美女扒开腿让男人桶爽久久动漫| 国产精品成人一区二区三区 | 日韩成人免费在线| 精品日韩久久久| 久色婷婷小香蕉久久| 午夜视频在线网站| 国产成人午夜精品影院观看视频 | 日本精品一区二区三区四区| 久久香蕉精品| 色婷婷成人在线| 国产精品996| 中文字幕免费高清视频| 国产亚洲一二三区| 欧美视频一区二区在线| 亚洲欧美日韩系列| 欧美黄色一级网站| 精品人伦一区二区三区蜜桃网站 | 欧美 日韩 国产在线| 欧美日韩性在线观看| 久久天天东北熟女毛茸茸| a91a精品视频在线观看| 亚洲性生活网站| 国产美女一区二区三区| 给我免费观看片在线电影的| 麻豆国产欧美一区二区三区| 亚洲黄色片免费看| 成人自拍视频在线| 亚洲区自拍偷拍| 亚洲美女视频在线| 国产精品第5页| 制服丝袜一区二区三区| 亚洲精品国产精品乱码视色| 91精品一区二区三区久久久久久| 亚洲精品网站在线| 亚洲一区二区福利| 伊人春色在线观看| 国产成人精品免费久久久久| 午夜视频一区二区在线观看| 欧美第一黄网| 综合在线一区| 黄色一级一级片| 国产风韵犹存在线视精品| 亚洲自拍偷拍一区二区| 亚洲麻豆国产自偷在线| 久久久久久不卡| 日韩你懂的在线播放| 黄色片在线播放| 欧美激情日韩图片| 粉嫩91精品久久久久久久99蜜桃| 国产精品久久久一区二区三区| 青青草国产免费一区二区下载| 久久99久久久久久| 九一久久久久久| 国产免费一区二区三区网站免费| 一区二区久久久| 91精品国产乱码久久久| 亚洲韩国欧洲国产日产av| av大片在线看| 欧美在线免费视频| www.成人网| 免费国产成人看片在线| 日本色综合中文字幕| 在线精品一区二区三区| 亚洲综合免费观看高清完整版| 国产精品sm调教免费专区| 日韩成人久久久| 狂野欧美性猛交xxxxx视频| 国产欧美精品日韩| 红桃视频在线观看一区二区| 99热自拍偷拍| 成人av网址在线观看| 黄色在线观看免费| 91精品国产综合久久久蜜臀图片| av在线电影观看| 国产成+人+综合+亚洲欧洲| 日日狠狠久久偷偷综合色| 欧美性潮喷xxxxx免费视频看| 国产在线精品视频| 强制高潮抽搐sm调教高h| 欧美日韩色综合| av二区在线| 国产有码在线一区二区视频| 欧美综合另类| 一本色道久久亚洲综合精品蜜桃| 国产情人综合久久777777| 波多野结衣在线电影| 亚洲欧洲成视频免费观看| 欧美91看片特黄aaaa| 国产精品免费一区二区三区都可以| 日韩深夜福利| 又粗又黑又大的吊av| 97久久超碰精品国产| 在线能看的av| 亚洲欧洲黄色网| 精品欧美日韩精品| 亚洲图片欧洲图片日韩av| 另类专区欧美蜜桃臀第一页| 日本 欧美 国产| 91麻豆精品国产91久久久久| 哥也色在线视频| 高清视频一区二区三区| 亚洲经典三级| 青青草福利视频| 欧美日韩中文一区| 黄色精品免费看| 国产精品theporn88| 亚洲视频成人| av黄色在线免费观看| 欧美午夜在线一二页| 成人免费看片| 国产精品18毛片一区二区| 国产精品女主播一区二区三区| 丝袜美腿中文字幕| 欧美日韩亚洲综合一区二区三区| 麻豆传媒免费在线观看| 高清av免费一区中文字幕| 99精品国产在热久久婷婷| 99久久精品免费视频| 91精品国产综合久久小美女| 98色花堂精品视频在线观看| 欧美成熟毛茸茸复古| 蜜桃视频第一区免费观看| a级片在线观看免费| 日韩久久精品成人| 亚洲热av色在线播放| 精品国产av无码一区二区三区| 久久综合999| 国产女人18毛片水18精| 91成人性视频| 91精品精品| theav精尽人亡av| 欧美军同video69gay| aa视频在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 国产麻豆精品视频| 日日夜夜狠狠操| 欧美人与性动交| 波多野结衣一区| 手机在线成人av| 这里只有精品99re| 久久人体大尺度| a级黄色片免费|