Golang执行cmd命令行的方法
短信预约 -IT技能 免费直播动态提醒
1. Golang执行系统命令使用 os/exec Command方法:
func Command(name string, arg ...string) *Cmd
第一个参数是命令名称,后面参数可以有多个命令参数。
cmd := exec.Command("ls", "-a")
if stdout, err := cmd.StdoutPipe(); err != nil { //获取输出对象,可以从该对象中读取输出结果
log.Fatal(err)
}
defer stdout.Close() // 保证关闭输出流
if err := cmd.Start(); err != nil { // 运行命令
log.Fatal(err)
}
if opBytes, err := ioutil.ReadAll(stdout); err != nil { // 读取输出结果
log.Fatal(err)
} else {
log.Println(string(opBytes))
}
2. 将命令的输出结果重定向到文件中:
stdout, err := os.OpenFile("stdout.log", os.O_CREATE|os.O_WRONLY, 0600)
if err != nil {
log.Fatalln(err)
}
defer stdout.Close()
cmd.Stdout = stdout // 重定向标准输出到文件
// 执行命令
if err := cmd.Start(); err != nil {
log.Println(err)
}
3. cmd的Start和Run方法的区别:
Start执行不会等待命令完成,Run会阻塞等待命令完成。
cmd := exec.Command("sleep", "10")
err := cmd.Run() //执行到此处时会阻塞等待10秒
err := cmd.Start() //如果用start则直接向后运行
if err != nil {
log.Fatal(err)
}
err = cmd.Wait() //执行Start会在此处等待10秒
4. 如果命令名称和参数写成一个字符串传给Command方法,可能会执行失败报错:file does not exist,但此时如果按以下方式强行启动一个DOS窗口(windows平台)进行执行,也是成功的。
在Windows平台,强行弹出DOS窗口执行命令行:
cmdLine := pscp -pw pwd local_filename user@host:/home/workspace
cmd := exec.Command("cmd.exe", "/c", "start " + cmdLine)
err := cmd.Run()
fmt.Printf("%s, error:%v \n", cmdLine, err)
5. 运行时隐藏golang程序自己的cmd窗口:
go build -ldflags -H=windowsgui
6. Windows平台上,执行系统命令隐藏cmd窗口:
cmd := exec.Command("sth")
if runtime.GOOS == "windows" {
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
}
err := cmd.Run()
到此这篇关于Golang执行cmd命令行的方法的文章就介绍到这了,更多相关Golang执行cmd命令行内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341