golang exec.Command 执行命令 获取详细错误信息

一般运行cmd命令时,使用的是:

cmd := exec.Command("sh", "-c",cmdStr)

	// 执行命令并获取输出
	output, err := cmd.Output()

或者
    // 执行命令并获取输出的详细信息
    output, err := cmd.CombinedOutput()

但是我在实际使用中,运行上面的语句时,由于输入的命令不可控,有可能会有报错,那么上面的语句有些时候可以拿到报错,有些时候无法拿到报错的详细信息,所以需要改成下面的写法:

cmd := exec.Command("find","\\")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    return
}
fmt.Println("Result: " + out.String())

使用这种写法,会说明问题是什么

exit status 1: find: ‘\\’: 无效的参数

而如果用最开头的那种写法,基本都只是得到:

exit status 1

从而无法知道真正发生的错误

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]和\[2\]提供了两个关于在Golang中使用exec.Command函数执行外部命令的示例代码。 在Golang中,exec.Command函数用于创建一个Cmd结构体,该结构体表示要执行的外部命令。可以通过设置Cmd的属性来指定命令的输入、输出和错误流。然后,可以使用Cmd的Start方法来启动命令的执行,并使用Wait方法等待命令执行完成。 在引用\[1\]的示例中,exec.Command函数用于执行Windows命令行(cmd.exe)。通过设置Cmd的Stdin属性,可以将输入绑定到一个缓冲区,然后可以向缓冲区写入命令。通过设置Cmd的Stdout属性,可以将输出绑定到一个缓冲区,以便获取命令的输出结果。 在引用\[2\]的示例中,exec.Command函数用于执行OpenSSL命令。通过设置Cmd的Stdin、Stdout和Stderr属性,可以分别绑定输入、输出和错误流。通过调用Cmd的Start方法启动命令的执行,并使用管道读取命令的输出和错误信息。 总结来说,通过使用exec.Command函数,可以在Golang执行外部命令,并获取其输出和错误信息。可以通过设置Cmd的属性来指定命令的输入、输出和错误流。然后,可以使用Cmd的Start方法启动命令的执行,并使用Wait方法等待命令执行完成。 #### 引用[.reference_title] - *1* [golang执行命令 exec.Command](https://blog.csdn.net/a19352226/article/details/53747323)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [golang exec.Command执行cmd,jar包自定义输入与输出](https://blog.csdn.net/yoorxee/article/details/123323716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值