Go说话中执行呼吁的几种方法
副问题[/!--empirenews.page--]
go说话用来执行一个体系的呼吁相对python来嗣魅照旧有点伟大的,执行呼吁是一个非经常见的需求,如挪用一个体系呼吁,启一个exe等,这里分为几种环境,之后同一总结一下。
以下以ping www.baidu.com 为例依次执行一下各类呼吁,首要行使尺度库中的os/exec。 在执行呼吁的时辰,我们首要行使的是os/exec包主的Cmd布局体要领,Cmd的布局体界说如下 Cmd布局体界说[1]。 首要的参数有
可是我们一样平常不直接结构Cmd布局体,而是通过exec.Command() 函数返回一个Cmd布局体指针 如 exec.Command("ping","www.baidu.com") ping为呼吁,"www.baidu.com" 为参数,在获得*Cmd往后再行使布局体要领Run,Start等要领来真正的执行呼吁。 只执行呼吁,不要输出功效这里的输出功效只是表白呼吁执行了,可是它详细的输出我们不体谅,在这种着适用的挺多的,我们只是想执行呼吁,在python里我们可以行使os.system() 函数来执行,虽然这个是阻塞的执行。
这里的r只是获取了该呼吁的执行功效,是0暗示没有错误,可是执行呼吁的输出如 正在 Ping www.a.shifen.com..... 我们并不体谅。 执行呼吁可以行使Run() 可能Start() 要领,Run是阻塞的执行,Start() 长短阻塞的执行。 ![]() 措施什么也没有输出,可是搁浅的一段时刻后才退出。假如换成command.Start() 则措施运行起来往后顿时就遏制了。 假如想要获取到像python 那种 os.system的执行功效,其拭魅这里的功效应该是ExitError,措施的退出码,应该怎么操纵呢?这里exec包里有一个专门的布局体ExitError,行使它的一些要领可以获取到ExitCode,可是想要获取到ExitCode获得获得呼吁竣事,也就是要阻塞的运行,上面行使Run() 要领可以阻塞守候执行功效,行使Start()要领往后,也可以行使Wait()要领来守候执行竣事。 ![]() 通过
来获取到呼吁执行的退出码。 执行呼吁而且要获取到输出功效这里的输出功效是呼吁行的尺度输出可能错误输出,也就是stdout可能stderr,通过bytes.Buffer来存储。 ![]() 这里获得的中文输出有乱码: ![]() 这个我查了一下一样平常都是说是配置一下节制台输出chcp可能行使:
这个包举办转换,我不想行使,这个往后找到要领再说吧。 呼吁行的输入偶然辰进入呼吁行会守候用户的交互,如输入nslookup。 ![]() 执行不在情形变量里的呼吁像上面这个ping 呼吁,因为在windows 可能linux中,这个呼吁是在情形变量里,可是像windows中的copy 呼吁,它是不在情形变量里,正常环境下你可以在cmd中行使copy 呼吁,可是假如在go 说话中假如直接像上面那样行使是不可的。 譬喻行使上面的代码,替代一下copy 呼吁。 ![]() (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |