GO语言调用系统命令
GO语言调用系统命令
指定执行的命令
需要在Go写的服务里面调用命令行或者批处理,并根据返回的结果做处理
引入的外部包为os/exec
func Command(name string, arg ...string) *Cmd
//函数返回一个*Cmd,用于使用给出的参数执行name指定的程序。返回值只设定了Path和Args两个参数
//如果name不含路径分隔符,将使用LookPath获取完整路径;否则直接使用name。参数arg不应包含命令名
命令执行方式
- 阻塞方式
需要有返回结果
适用于执行普通非阻塞命令且需要标准输出
需要对命令的标准输出逐行进行处理
- 非阻塞式
不需要有返回结果
官网调用系统命令方式
命令指定后我们需要执行,执行命令有两种方法run()和start()函数
- run()函数
Run执行c包含的命令,并阻塞直到完成
如果命令成功执行,stdin、stdout、stderr的转交没有问题,并且返回状态码为0,方法的返回值为nil;如果命令没有执行或者执行失败,会返回*ExitError类型的错误;否则返回的error可能是表示I/O问题
func (c *Cmd) Run() error
- start()函数
Start开始执行c包含的命令,但并不会等待该命令完成即返回。Wait方法会返回命令的返回状态码并在命令返回后释放相关的资源
func (c *Cmd) Start() error
- CombinedOutput()函数
执行命令并返回标准输出和错误输出合并的切片
func (c *Cmd) CombinedOutput() ([]byte, error)
- Wait()函数
func (c *Cmd) Wait() error
Wait会阻塞直到该命令执行完成,该命令必须是被Start方法开始执行的。
如果命令成功执行,stdin、stdout、stderr的转交没有问题,并且返回状态码为0,方法的返回值为nil;如果命令没有执行或者执行失败,会返回*ExitError
类型的错误;否则返回的error可能是表示I/O问题。Wait方法会在命令返回后释放相关的资源
- Output()函数
func (c *Cmd) Output() ([]byte, error)
执行命令并返回标准输出的切片
run()和start()函数的区别?
run函数是一种阻塞式,直至命令结束
start函数是非阻塞式,不会等待命令结束,但是需要使用wait方法等待结束
go调用windows系统命令
go调用windows cmd命令
- 非阻塞式无返回结果
package main
import (
"fmt",
"os.exec"
)
func main() {
//go操作cmd命令
//运行命令不会获取返回值
cmd1 := "find"
cmd2 := exec.Command("cmd", "/c", cmd1) // /C参数 执行字符串指定的命令然后终止
err := cmd2.Run()
if err != nil {
fmt.Println("执行语句失败" + err.Error())
} else {
fmt.Println("执行语句成功")
}
}
执行结果:
执行语句失败exit status 2
go调用powershell命令
package main
import (
"fmt",
"os.exec"
)
func main() {
//go操作powershell命令
//运行命令不会获取返回值
cmd1 := "Get-Date"
cmd2 := exec.Command("powershell", cmd1)
err := cmd2.Run()
if err != nil {
fmt.Println("执行语句失败" + err.Error())
} else {
fmt.Println("执行语句成功")
}
}
指定命令错误返回失败:
执行命令失败:exec: "powerhshell": executable file not found in %PATH%
- 阻塞式获取命令执行结果
go 调用powershell命令执行结果
package main
import (
"fmt",
"os.exec"
)
func main() {
//go操作powershell命令
//运行命令获取返回值
cmd1 := "Get-Date"
cmd2 := exec.Command("powershell", cmd1)
output, err := cmd2.CombinedOutput()
if err != nil {
fmt.Println("执行命令失败:" + err.Error())
} else {
fmt.Println(string(output))
}
}
执行结果:
2021��12��14�� 23:53:29
备注:输出中文出现乱码情况,后面解决后补充结果
go调用脚本
- 调用powershell脚本
在当前目录下创建test.ps1,powershell脚本test.ps1内容
Get-Date
调用脚本test.ps1
package main
import (
"fmt",
"os.exec"
)
func main() {
//go操作powershell命令
//运行命令获取返回值
cmd1 := "./test.ps1"
cmd2 := exec.Command("powershell", cmd1)
output, err := cmd2.CombinedOutput()
if err != nil {
fmt.Println("执行命令失败:" + err.Error())
} else {
fmt.Println(string(output))
}
}
执行结果:
E:\work\test\src\test>go run main.go
2021��12��15�� 0:26:21
- go调用shell脚本
THE END
0
海报
GO语言调用系统命令
GO语言调用系统命令
指定执行的命令
需要在Go写的服务里面调用命令行或者批处理,并根据返回的结果做处理
引入的外部包为os/exec
func Command(name string, arg ...string) *Cmd
//函数返回一个*Cmd,用于使用给出的参数执行name指定的程序。返回值只设定了Path和Args两个参数
……
文章目录
关闭