Go 程序在调用另一个程序后结束并出现错误代码
Go progam ends after calling other program with errorcode
我遇到以下问题:
我在 go 例程中调用 "cryptsetup"。因此,如果 cryptsetup 成功并以 exitcode 0 退出,则一切正常。如果 cryptsetup 遇到错误,比如密码错误,并以错误代码 != 0 退出,我的 go 函数只打印错误,然后退出而不会出现恐慌或错误代码。
openCmd := exec.Command("cryptsetup", "luksOpen", *container, "container")
var inPipe io.WriteCloser
if inPipe, err = openCmd.StdinPipe(); err == nil {
if err = openCmd.Start(); err == nil {
log.Println("cryptsetup command started!")
inPipe.Write([]byte(pwd))
log.Println("luks password passed!")
inPipe.Close()
log.Println("stdin pipe closed!")
if err = openCmd.Wait(); err == nil {
log.Println("Container opened!")
if err = exec.Command("mount", "-t", "ext4", "/dev/mapper/container", "/mnt").Run(); err == nil {
mountStatus.isMounted = true
pwd = ""
log.Println("Container mounted!")
return true
} else {
log.Fatalf("Couldn't mount partition: %s", err)
}
} else {
log.Fatalf("cryptsetup execution failed: %s", err)
}
} else {
log.Fatalf("Couldn't start cryptsetup command: %s", err)
}
} else {
log.Fatalf("Couldn't open cryptsetup stdin: %s", err)
}
我的控制台输出如下所示:
2018/06/21 09:05:17 cryptsetup command started!
2018/06/21 09:05:17 luks password passed!
2018/06/21 09:05:17 stdin pipe closed!
2018/06/21 09:05:20 cryptsetup execution failed: exit status 2
我不知道我的程序为什么退出。有人可以帮忙吗?
因为您正在调用 log.Fatalf()
,并引用其文档:
Fatalf is equivalent to Printf() followed by a call to os.Exit(1).
log.Fatalf()
故意终止您的应用程序。如果您不希望它终止,请不要调用 log.Fatalf()
,但是例如log.Printf()
相反。
我遇到以下问题: 我在 go 例程中调用 "cryptsetup"。因此,如果 cryptsetup 成功并以 exitcode 0 退出,则一切正常。如果 cryptsetup 遇到错误,比如密码错误,并以错误代码 != 0 退出,我的 go 函数只打印错误,然后退出而不会出现恐慌或错误代码。
openCmd := exec.Command("cryptsetup", "luksOpen", *container, "container")
var inPipe io.WriteCloser
if inPipe, err = openCmd.StdinPipe(); err == nil {
if err = openCmd.Start(); err == nil {
log.Println("cryptsetup command started!")
inPipe.Write([]byte(pwd))
log.Println("luks password passed!")
inPipe.Close()
log.Println("stdin pipe closed!")
if err = openCmd.Wait(); err == nil {
log.Println("Container opened!")
if err = exec.Command("mount", "-t", "ext4", "/dev/mapper/container", "/mnt").Run(); err == nil {
mountStatus.isMounted = true
pwd = ""
log.Println("Container mounted!")
return true
} else {
log.Fatalf("Couldn't mount partition: %s", err)
}
} else {
log.Fatalf("cryptsetup execution failed: %s", err)
}
} else {
log.Fatalf("Couldn't start cryptsetup command: %s", err)
}
} else {
log.Fatalf("Couldn't open cryptsetup stdin: %s", err)
}
我的控制台输出如下所示:
2018/06/21 09:05:17 cryptsetup command started!
2018/06/21 09:05:17 luks password passed!
2018/06/21 09:05:17 stdin pipe closed!
2018/06/21 09:05:20 cryptsetup execution failed: exit status 2
我不知道我的程序为什么退出。有人可以帮忙吗?
因为您正在调用 log.Fatalf()
,并引用其文档:
Fatalf is equivalent to Printf() followed by a call to os.Exit(1).
log.Fatalf()
故意终止您的应用程序。如果您不希望它终止,请不要调用 log.Fatalf()
,但是例如log.Printf()
相反。