登录
首页 >  Golang >  Go问答

psql 命令在 os/exec 中输出截断

来源:stackoverflow

时间:2024-03-25 19:48:32 286浏览 收藏

在使用 `os/exec` 按顺序运行 `psql` 命令时,如果脚本执行期间出现错误,输出会遭到截断,导致无法显示错误信息。本文探讨了如何修改 `go` 代码以解决此问题,确保在错误发生时显示输出的其他行。

问题内容

我目前正在使用 os/exec 按顺序运行许多 psql 命令。

我的问题是,如果在脚本执行过程中出现错误,输出不会显示它。

示例: 从命令行执行命令文件时,输出如下:

set
create function
psql:update-14.3.7.1/dml/----------------xxxxxxxx.sql:33: error:  null value in column "tipoxxxxxxxx" violates not-null constraint
detalhe:  failing row contains (9, 0, null, null, null, null, aaaaaaaaa_bbbbbbbbbb_ccccc_banana, null, null, null).
contexto:  sql statement "insert into ----------------xxxxxxxx
        (id,versao,tipoxxxxxxxx,carrotdeapplefinal,carrotdetttttttt,ativa,funcionalidade,driver,alterar_na_xxxxxxxx)
        values
        (nextval('sq_----------------xxxxxxxx'),0,tipoaaaaaaaaa,carrotapple,carrottttttttt,alterarnaxxxxxxxx)"
pl/pgsql function createorupdateaaaaaaaaa() line 22 at sql statement
drop function

并从 go 代码执行完全相同的文件,输出为:

set
create function
drop function

我用于运行命令(并显示输出)的 go 代码是:

cmd := exec.Command(comando, argList...)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err := cmd.Run()
    cmdS := out.String()
    fmt.Println("cmdS", cmdS)
    if err != nil {
        fmt.Println("XYZ")
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    }

如何修改我的代码以显示输出的其他行?


解决方案


程序可以选择使用 stderrstdout。执行错误的存在与是否向 stderr 写入内容无关。

在查找程序的所有输出时,始终检查两个流。

以上就是《psql 命令在 os/exec 中输出截断》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>