最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command.
但是如果直接使用原生exec.Command会造成大量的重复代码,网上搜了一圈又没有找到对exec.Command相应的封装包,索性自己封装了一个,取名为gocommand.目前支持Linux和Windows,欢迎各位大神在github上提交代码补充其他平台的实现.
下面介绍一下gocommand库的实现思路:
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: 错误消息 ExecNoWait(args ...string) error }