У меня есть команда, которой я отправляю данные через Stdin и ожидаю 28 выходных потоков (включая Stdout
).
Поэтому я хотел использовать поле cmd.ExtraFiles
с os.Pipe
для каждого из os.ExtraFiles
.
Я написал следующее:
backgroundContext, cancelCommand := context.WithCancel(context.Background())
cmd := exec.CommandContext(backgroundContext, "command", args...)
cmd.ExtraFiles = make([]*io.File, 27, 0)
var outputPipe io.ReadCloser
var inputPipe io.WriteCloser
outputPipe, inputPipe, err = os.Pipe()
cmd.ExtraFiles[0] = &inputPipe
cmd.ExtraFiles[1] = &outputPipe
Последние две строки выдают ошибку, поскольку типы не совпадают:
./main.go:876:26: cannot use &inputPipe (type *io.WriteCloser) as type *os.File in assignment
./main.go:877:26: cannot use &outputPipe (type *io.ReadCloser) as type *os.File in assignment
I ' Я уверен, что мы можем назначить каналы, так как я, например, могу использовать функцию StdoutPipe()
, и она работает, как и ожидалось.
Как мне это сделать с os.ExtraFiles
?