go - 以 cmd 为参数的 golang exec 不打印标准输出
问题描述
cmdstr := "ssh -i ....... blah blah blah" ssh to an ip and run rpm command to install rpm
cmd := exec.Command("/bin/bash", "-c", cmdstr)
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
fmt.Println(out.String())
}
如果我有没有 /bin/bash 的 ping 命令,out.String() 不会打印任何内容。任何人都知道为什么?
解决方案
cmd.Stdout 捕获命令执行成功的输出
cmd.Stderr 捕获执行过程中发生错误时的命令输出
您可以尝试使用 cmd.Output() 变体并从 Stderr 捕获执行错误
cmdstr := "ssh -i ....... blah blah blah" // ssh to an ip and run rpm command to install rpm
cmd := exec.Command("/bin/bash", "-c", cmdstr)
var errb bytes.Buffer
cmd.Stderr = &errb
output, err := cmd.Output()
if err != nil {
fmt.Printf("error: %s", errb.String()) // capture any error output
}
fmt.Println(string(output)) // when successful
推荐阅读
- python - 使用视频流进行解码时出错
- asp.net - 使用 VB 自动在单独的电子邮件中发送每个 PDF 文件
- amazon-s3 - 如何使用 Spring Boot AWS SDK 设置 S3 文件对象类型
- swift - SwiftUI TextField 在深色模式下改变颜色
- excel - 从 Excel 中的数组中获取数字和关闭设置数字
- validation - 根据条件执行 Yup 测试验证
- pandas - 尽管显示滚动条,但输出 ipywidget/cell 未水平滚动
- php - 作曲家“提供”了什么?
- ruby-on-rails - 如何将自定义字段添加到 devise_invitable 邀请表单
- jsonschema - 是否需要在 AdditionalProperties 中添加dependentSchemas 属性