duanben1909
duanben1909
2018-12-14 11:47
浏览 427
已采纳

如何从exec命令获取错误消息

I am using Go to create a CLI. I am executing a command and if there is an error thrown from the OS I want to print it.

cmd := exec.Command("abc", "run", pathToFile)
err := cmd.Start()
if err != nil {
    fmt.Printf("Error : %v 
", err)
    os.Exit(1)
}
err = cmd.Wait()
if err != nil {
    fmt.Printf("Error: %v 
", err)
    os.Exit(1)
}

This only gives me the exit status code

Error:  exit status 1 

This is not descriptive enough.

When I run the command directly in terminal I get the error message clearly.

source does not exist 'test.exe'

Is there a way to print the message?

图片转代码服务由CSDN问答提供 功能建议

我正在使用Go创建一个CLI。 我正在执行命令,如果要从操作系统中抛出错误,则要打印该命令。

  cmd:= exec.Command(“ abc”,“ run”,  pathToFile)
err:= cmd.Start()
if err!= nil {
 fmt.Printf(“ Error:%v 
”,err)
 os.Exit(1)
} 
err = cmd  .Wait()
if err!= nil {
 fmt.Printf(“错误:%v 
”,err)
 os.Exit(1)
} 
   \  n 
 

这只给我退出状态代码

 错误:退出状态1 
   
 
 

这还不够描述。

直接在终端中运行命令时,我会清楚地收到错误消息。

 源不存在 'test.exe'
   
 
 

是否可以打印消息?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dounuogong0358
    dounuogong0358 2018-12-14 12:54
    已采纳

    StderrPipe returns a pipe that will be connected to the command's standard error when the command starts.

    cmd := exec.Command("abc", "run", pathToFile)
    stderr, _ := cmd.StderrPipe()
    if err := cmd.Start(); err != nil {
        log.Fatal(err)
    }
    
    scanner := bufio.NewScanner(stderr)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
    
    点赞 评论

相关推荐