执行 psql 命令时 os/exec 上的输出不完整
Incomplete output on os/exec when executing psql commands
我目前正在按顺序使用 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
我的 运行ning 命令(并显示输出)的 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())
}
如何修改我的代码以显示输出的其他行?
程序可以根据自己的选择使用 stderr
和 stdout
。执行错误的存在与是否有内容写入 stderr
无关。
在查找程序的所有输出时始终检查两个流。
我目前正在按顺序使用 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
我的 运行ning 命令(并显示输出)的 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())
}
如何修改我的代码以显示输出的其他行?
程序可以根据自己的选择使用 stderr
和 stdout
。执行错误的存在与是否有内容写入 stderr
无关。
在查找程序的所有输出时始终检查两个流。