Go执行shell指令的最佳方式
文章目录
- Go执行shell指令的最佳方式
- 1、前言
- 2、代码示例
1、前言
通过Go执行shell命令在网上有很多方式,但是在调试的时候往往发现这些方式存在或多或少的问题,最终在这里找到一个目前感觉最佳的方式,出错后的提示信息足够完整。
2、代码示例
这里以修改ip的命令为例:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("ifconfig", "ens33", "40.40.40.155",
"netmask", "255.255.255.0")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Println(fmt.Sprint(err) + ": " + string(output))
}
fmt.Println(string(output))
}
当编译后直接运行时报错:
exit status 255: SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
这样我们就可以大致猜测出来是运行权限的问题,然后使用root权限运行程序即可解决,使用一些其它的方式给到的错误都是什么exit 1或者exit 255之类的状态值,不方便调试。如果你在使用时发现:
execute command failed:exit status 1
这样的错误,那么就换成上面这种使用方式进行处理吧。