问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

golang执行命令行(go执行命令行)

发布网友 发布时间:2024-09-27 18:11

我来回答

1个回答

热心网友 时间:2024-09-28 00:47

Golang之实用的命令行工具包cobra

Cobra是一个非常实用(流行滚掘)的golang包,很多优秀的开源应用都在使用它,包括Docker和Kubernetes等,它提供含销了简单大老核的接口来创建命令行程序。同时,Cobra也是一个应用程序,用来生成应用框架,从而开发以Cobra为基础的应用。

golang调用外部命令,并且通过stdin传数据

golang调用外部命令,并且通过stdin传数据的例子

使用场景:

当我们需要调用一个外散明部命令,然后给外部冲帆告命令传参数,常用方便的轿竖做法是通过命令行传参数,但是有些时候数据太长,或者基于安全考虑,比如传密码,等不方便使用参数时,我们可以通过stdin传递。

下面一个dockerlogin传递密码的例子:

当然这都需要外部命令本身支持从stdin读入数据哈。

golang执行系统命令psaux|grep"xxxx",总是异常退出

你这个是老运团两个命令,不是一个命令。

grep是查找命令,你应该:

exec.Command("悄或ps","aux").Output()

出结果后再过虑。侍橘

golang命令行库Cobra的使用

写了2次才写完,内容很长,翻译了很久,内容来源于Cobragithub介绍。翻译完也更全面的了解了Cobra,功能相当强大完善,各种使用的场景都考虑到了。另外宏此也扩展了一些其它知识,比如命令行玩法,Levenshteindistance等等。以下是正文:

Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具。Cobra同时也是一个程序,用于创建CLI程序

Cobra是建立在结构的命令、参数和标志之上。

命令代表操作,参数和标志是这些行动的修饰符。

最好的应用程序就像读取句子。用户会知道如何使用本机应用程序,因为他们将理解如何使用它。

比如下面的例子,server是命令,port是标志:

在下面的命令,我们告诉Git克隆url地址bare

使用Cobra很简单。首先,使用goget安装最新版本

然后在你项目里引用Cobra

通常基于Cobra的应用程序将遵循下面的组织结构,当然你也可以遵循自己的接口:

在Cobra应用程序中,通常main.go文件非常空洞。它主要只干一件事:初始化Cobra。

Cobra提供自己的程序来创建你的程序并且添加你想要的命令。这是最简单的方式把Cobra添加到你的程序里。

这里你能找到相关信息

使用Cobra,需要创建一个空的main.go文件和一个rootCmd文件。你可以选择在合适的地方添加额外的命令。

Cobra不需要特殊的构造函数。简单的就可以创建你的命令。

理想情况下你把这个放在在app/cmd/root.go

你会另外定义标志和处理配置init()函数。

比如cmd/root.go

你需要在main函数里执行root命令。

通常main.go文件非常空洞。它主要只干一件事:初始化Cobra。

其它的命令通常定义在cmd/目录下的自己文件内

如果你想创建一个version命令,你可以创建cmd/version.go文件,并在文件里这么写:

标志提供修饰符控制动作命令如何操作

当标志定义好了,我们需要定义一个变量来关联标志

'持久'表示每个在那个命令下的命令都将能分配姿绝漏到这个标志。对于全局标志,'持久'的标志绑定在root上。

Cobra默认只在目标命令上解析标志,父命令忽略任何局部标志。通过打开Command.TraverseChildrenCobra将会在执行任意目标命令前解析标志

你同样可以通过viper绑定标志:

在这个例子中,永久的标记author被viper绑定,注意,当用户没有给--author提供值,author不会被赋值。

标记默认是可选的,如果你希望当一个标记没有设置时,命令行报错,你可以标记它为必须的

验证位置参数可以通过Command的Args字段。

内置下列验证方法

一个设置自定义验证的例子

在下面迹烂的例子,我们定义了3个命令。2个在顶级,一个(cmdTimes)是其中一个顶级命令的子命令。在这个例子里,由于没有给rootCmd提供Run,单独的root是不能运行的,必须要有子命令。

我们仅为一个命令定义了标记。

更多关于flags的文档可以在找到

更完整大型程序的例子,可以查看Hugo.

当你的程序有子命令时,Cobra会自动给你程序添加help命令。当你运行‘apphelp’,会调用help命令。另外,help同样支持其它输入命令。例如,你有一个没有任何其它配置的命令叫‘create’,当你调用‘apphelpcreate’Corbra将会起作用。

下面的输入是Cobra自动生成的。除了命令和标志的定义,其它不再需要。

help就跟其它命令一样,并没有特殊的逻辑或行为。事实上,你也可以提供你自己help如果你想的话。

你能为默认的命令,提供你自己的help命令或模板。使用下面的方法:

后2个也将适用于任何子命令

当用户提供无效的标记或命令,Cobra将会返回用法。

你可能从上面的帮助意识到,默认的帮助将被嵌入到用法里然后作为输出。

你能提供你自己的用法函数或模板给Cobra使用。

比如帮助,方法和模板都可以重写。

如果Version字段设置到了根命令,Cobra会提供了一个顶层‘--version’标记。运行带上‘--version’标记的程序,将会按照模板版本信息。模板可以通过cmd.SetVersionTemplate(sstring)方法修改

在命令运行前或运行后,再运行方法非常容易。PersistentPreRun和PreRun方法将会在Run之前执行。PersistentPostRun和PostRun方法将会在Run之后执行。Persistent*Run方法会被子命令继承,如果它们自己没有定义的话。这些方法将按照下面的属性执行:

下面的例子,2个命令都使用了上面的特性。当子命令执行的时候,它将执行根命令的PersistentPreRun,但不会执行根命令的PersistentPostRun:

输出:

Cobra会自动输出建议,当遇到“unknowncommand”错误时。这使得当输入错误时,Cobra的行为类似git命令。例如:

建议会基于注册的子命令自动生成。使用了Levenshteindistance的实现。每一个注册的命令会匹配2个距离(忽略大小写)来提供建议。

如果你希望在你的命令里,禁用建议或虚弱字符串的距离,使用:

你可以通过SuggestFor来给命令提供明确的名词建议。这个特性允许当字符串不相近,但是意思与你的命令相近,别切你也不想给该命令设置别名。比如:

Cobra可以基于子命令,标记,等生成文档。以以下格式:

Cobra可以生成一个bash-completion文件。如果你给命令添加更多信息,这些completions可以非常强大和灵活。更多介绍在BashCompletions。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机垃圾清理使用哪个软件最好? 适合新手用的手机清理软件 苹果手机怎么把号码黑名单里? VUE视频相机使用教程 教你简单几步拍出大片 如何使用佳能相机录像 相机录像具体操作教程分享 羊头捣蒜做法图解 服刑期间领取养老金是否构成犯罪 狗狗胰腺炎最怕的三种蔬菜是什么 怎么喂食 银行卡给专业的贷款公司做流水有风险吗? 电话号可直接贷款吗,他知道我的实名电话,还用paos机刷了我的银行卡一... 电脑开机后, CPU频率一直在0.0几? 国家司法考试一般考多少门?总分是多少? 女儿十一岁了,妈妈说了女儿不听话,就住在了爷爷奶奶家你说怎么 孩子11岁叛逆期怎么管教最合适 11岁孩子叛逆期怎么管教 十一岁的小孩不听话怎么办十一岁的小孩不听话的方法 教育十一二岁的孩子如何管教 教育十一二岁的孩子怎么管教 教育十一二岁的孩子怎么管教教育十一二岁的孩子如何管教 出世什么意思 2019年新疆喀什社保缴存基数 2019新疆喀什警察报到要培训吗? 2019年新疆内初班喀什分数线是多少? 2019新疆维吾尔自治区喀什地区塔什库尔干县区内初中班考试成绩 准考 ... 浙江省非遗有哪些著名的 闽南语“ 特直”是什么意思 ...processorlnfmation(KERNEL32.dll)是什么意思? InternetSeer来的邮件什么意思? 奈飞小白入门教程&FAQ 小孩大便后用纸擦有血怎么回事 3岁儿童大便有血怎么回事 go语言如何运行(go语言技巧) ...错的人 却可能是你一生最难忘的人”这首歌叫什么名字? Golang标准库flag全面讲解 Go语言 通过go bulid -tags 实现编译控制 goprintfprintln go语言println和printf和print? 个体户可以申请注册商标吗 个体户能申请注册商标吗 云南大学洋浦校区 属于哪个城市 我的出脚频率非常慢 怎么办?高分奖励!!如果好 还会追加 电视版的快手怎么安装 海信电视怎么样下载快手? 从洋浦车场到昆明理工大学城市学院如何坐车? 为啥win10不能安装 如何发送父亲去世的消息给亲人朋友 安装Windows10时出现错误,怎么回事? 安装Windows10时出错 昆山城东游泳馆推荐,昆山户外团建旅游景点 i39100和i310100有什么区别? 苏州宝藏级别的性价比团建民宿都有哪些? 原汁机使用安全吗,会不会有危险?