为什么log.Printf()无法打印?

时间:2019-05-14 15:31:50

标签: go

我正在学习Go,并且遇到了我不了解的这种行为。当我执行错误检查并使用log.Printf()时,会看到os错误,通常我会在命令行上遇到相同的错误。

但是当我使用log.Fatal()时,最后一个log.Printf()不会打印到屏幕上。

package main

import (
    "log"
    "os/exec"
    "fmt"
)

func main() {
    cmd := exec.Command("ls", "-2")

    stdoutStderr, err := cmd.CombinedOutput()
    if err != nil {
        log.Printf("Error: %v", err)
        fmt.Println("Printing log fatal()")
        log.Fatal(err)
    }
    fmt.Printf("Output %s\n", stdoutStderr)

}

我希望看到此输出:

# go run main.go 
2019/05/14 11:23:34 Error: exit status 2
Output ls: invalid option -- '2'
Try 'ls --help' for more information.
Printing log fatal()
2019/05/14 11:24:45 exit status 2
exit status 1

但是我的实际结果是:

# go run main.go
2019/05/14 11:24:45 Error: exit status 2
Printing log fata()
2019/05/14 11:24:45 exit status 2
exit status 1

1 个答案:

答案 0 :(得分:1)

log.Fatal在打印日志消息后调用os.Exit()。因此log.Fatal()之后的语句将不会被调用。我相信这就是您在日志中看不到fmt.Printf("Output %s\n", stdoutStderr)输出的原因。