1 回答
TA贡献1847条经验 获得超7个赞
使用 运行程序时exec,如果退出代码不为 0,则会出现错误。来自文档:
如果命令运行,复制 stdin、stdout 和 stderr 没有问题,并以零退出状态退出,则返回的错误为零。
如果命令无法运行或未成功完成,则错误类型为 *ExitError。对于 I/O 问题,可能会返回其他错误类型。
所以这里发生的事情是当文件不同时 diff 返回一个错误,但你把它当作一个运行时错误。只需更改您的代码以反映它不是。通过检查错误是可能的。
例如这样的事情:
output, err := exec.Command("diff", "-u", "/tmp/revision-1", "/tmp/revision-4").CombinedOutput()
if err != nil {
switch err.(type) {
case *exec.ExitError:
// this is just an exit code error, no worries
// do nothing
default: //couldnt run diff
log.Fatal(err)
}
}
此外,我已经更改了 get CombinedOutput,因此如果发生任何特定于差异的错误,您也会看到 stderr 。
请注意,即使其中一个文件不存在,您也会收到“有效”错误。因此,您可以ExitError通过执行以下操作来检查的退出代码:
switch e := err.(type) {
case *exec.ExitError:
// we can check the actual error code. This is not platform portable
if status, ok := e.Sys().(syscall.WaitStatus); ok {
// exit code 1 means theres a difference and is not an error
if status.ExitStatus() != 1 {
log.Fatal(err)
}
}
- 1 回答
- 0 关注
- 265 浏览
添加回答
举报