Lua中,我们一般用os.execute()执行命令行命令,此时会显示命令行窗口,并返回系统状态码。

澳门新葡亰,最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command.

但我们有时需要捕获返回内容/不显示命令行窗口,则可以使用函数:io.popen(),这个函数也可以执行命令行命令,但是返回的是一个文件,同时不显示命令行窗口。

但是如果直接使用原生exec.Command会造成大量的重复代码,网上搜了一圈又没有找到对exec.Command相应的封装包,索性自己封装了一个,取名为gocommand.目前支持Linux和Windows,欢迎各位大神在github上提交代码补充其他平台的实现.

例子:

下面介绍一下gocommand库的实现思路:

local ts= io.popen('dir')
local s = ts:read("*all")
print(s)
package gocommand// 命令行接口type Commander interface {// 执行命令行并返回结果// args: 命令行参数// return: 进程的pid, 命令行结果, 错误消息Exec(args ...string) (int, string, error)// 异步执行命令行并通过channel返回结果// stdout: chan结果// args: 命令行参数// return: 进程的pid// exception: 协程内的命令行发生错误时,会panic异常ExecAsync(stdout chan string, args ...string) int// 执行命令行// args: 命令行参数// return: 错误消息ExecIgnoreResult(args ...string) error}

gocommand目前的命令行执行函数都是源于Commander接口,目前该接口定义了3个函数,分别是:执行命令行病返回结果;异步执行命令行并得到结果;执行命令行并忽略结果.

package gocommandimport ("runtime")// Command的初始化函数func NewCommand() Commander {var cmd Commanderswitch runtime.GOOS {case "linux":cmd = NewLinuxCommand()case "windows":cmd = NewWindowsCommand()default:cmd = NewLinuxCommand()}return cmd}

创建一个Command的实现,并根据当前的操作系统,返回对应的实现函数,目前只实现了Linux和Windows,(Mac留给各位大神,其中LinuxCommand的代码实现如下:

网站地图xml地图