1.2.14 【实战】用Go运行Shell脚本程序
Go语言提供了
os/exec包来运行Shell命令,os/exec包的Command()函数可以用于输入Shell命令,用给定参数执行指定的程序Command()函数会返回一个名为*Cmd的结构体,代表一个执行的外部命令,当调用它的Run()、Output()、CombinedOutput()等方法后这个对象就不能重用了示例:执行
ls命令,并传递-a参数cmd := exec.Command("ls", "-a") err := cmd.Run() if err != nil { log.Fatalf("执行失败,异常:", err) }参数:
第一个参数是要执行的程序命令行
其他参数是程序命令行参数
假如执行命令,控制台没有任何输出,但命令已经执行,只不过Go程序没有捕获和处理输出,所以控制台没有输出,可通过如下字段,实现定制化输入输出:
Stdin io.Reader Stdout io.Writer Stderr io.Writer备注:
如果Stdin为空,程序会从
null device(os.DevBull)中读取数据如果Stdin是*os.File对象,则会从这个文件中读取数据
如果Stdin是os.Stdin,则会从标准输入(如命令行)中读取数据
Stdout和Stderr代表外部程序进程的”标准输出“和”错误输出“
如果Stdout和Stderr为空,则输出到
null device中如果Stdout和Stderr是*os.File对象,则会向文件中输出数据
如果Stdout和Stderr分别设置为os.Stdout、os.Stderr,则会输出到命令行中
带输出命令的示例如下:
cmd := exec.Command("ls", "-a") // 标准输出 cmd.Stdout = os.Stdout // 错误输出 cmd.Stderr = os.Stderr err := cmd.Run() if err != nil { log.Fatalf("执行失败,异常:", err) }可以通过
tr命令转换输入,举例:小写换大写:func main() { cmd := exec.Command("tr", "a-z", "A-Z") cmd.Stdin = strings.NewReader("i love snow") var out bytes.Buffer cmd.Stdout = &out err := cmd.Run() if err != nil { log.Fatal(err) } fmt.Println(out.String()) }结果:I LOVE SNOW
Last updated