golang执行命令操作 exec.Command
我就废话不多说了,大家还是直接看代码吧~
cmd:=exec.Command("cmd") in:=bytes.NewBuffer(nil) cmd.Stdin=in//绑定输入 varoutbytes.Buffer cmd.Stdout=&out//绑定输出 gofunc(){ in.WriteString("nodeE:/design/test.js\n")//写入你的命令,可以有多行,"\n"表示回车 }() err=cmd.Start() iferr!=nil{ log.Fatal(err) } log.Println(cmd.Args) err=cmd.Wait() iferr!=nil{ log.Printf("Commandfinishedwitherror:%v",err) } fmt.Println(out.String())
补充:golang执行外部命令超时处理exec.CommandContext
使用exec.CommandContext来处理外部命令的超时
funcmain(){ timeout:=5 ctx,cancel:=context.WithTimeout(context.Background(),time.Duration(timeout+5)*time.Second) defercancel() cmdarray:=[]string{"-c",fmt.Sprintf("%s%s","sleep","10")} cmd:=exec.CommandContext(ctx,"bash",cmdarray...) out,err:=cmd.CombinedOutput() //ifctx.Err()==context.DeadlineExceeded{} fmt.Printf("ctx.Err:[%v]\n",ctx.Err()) fmt.Printf("error:[%v]\n",err) fmt.Printf("out:[%s]\n",string(out)) }
运行结果是:
ctx.Err:[contextdeadlineexceeded] error:[signal:killed] out:[]
如果是一个命令错误输出是什么:
下面这个例子是使用sleep不带参数,显示是错误的。
cmdarray:=[]string{"-c",fmt.Sprintf("%s%s","sleep","")}
ctx.Err:[] error:[exitstatus1] out:[usage:sleepseconds ]
可以命令的执行错误不会导致ctx.Err()错误。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。