Go语言执行shell命令
Go语言内置包os/exec用来执行shell命令。
输入shell命令的函数为Command(),第一个参数是要执行的命令,其他参数是命令的命令行参数。
func Command(name string, arg ...string) *Cmd
Command()函数返回一个结构体类型指针*Cmd。
Cmd结构体包含以下字段:
type Cmd struct { Stdin io.Reader Stdout io.Writer Stderr io.Writer ... }
Stdin:如果不设置,进程会从null device(os.DevNll)中读取数据;如果Stdin是*os.File对象,则从文件中读取数据;如果Stdin是os.Stdin,则从os标准输入中读取数据。
Stdout和Stderr代表进程输出,如果不设置,则执行go程序后将在标准输出将看不到任何输出,进程执行结果将输出在null device中。如果设置是*os.File对象,则输出到文件中;如果Stdin是os.Stdout/os.Stderr,执行结果将输出到系统标准输出/错误(如果执行的shell命令有输出)。
Cmd结构体包含以下方法:
func (c *Cmd) Run() error func (c *Cmd) Start() error func (c *Cmd) Wait() error ...
Run()方法开始执行命令并等待命令执行完成。
Start()方法开始执行命令但不会等待命令执行完成,要等待命令执行完成必须调用Wait()。
下面看一个简单示例:执行dmesg命令并将结果输出到标准输出
import ( "fmt" "os" "os/exec" ) func main() { cmd := exec.Command("dmesg", "-T") // 设置进程输出为Linux标准输出、标准错误 cmd.Stdout = os.Stdout cmd.Stderr = os.Stdout if err := cmd.Run(); err != nil { fmt.Println(err) } }
详细内容可以查阅官方文档:https://pkg.go.dev/os/exec