我试图让一根管子通向cmd.ExtraFiles我目前有错误说cannot use cmdstdout (type io.ReadCloser) as type []byte in argument to pipeR.Readcannot use cmdstdout (type io.ReadCloser) as type []byte in argument to fd3.Write这是我到目前为止的 gocodecmd2 = exec.Command("-i", "pipe:0", "-i", "pipe:1")cmd1 := exec.Command("command", "-o", "-")pipeR, pipeW, _ := os.Pipe()cmd2.ExtraFiles = []*os.File{ pipeW,}cmd1.Start()cmd1stdout, err := cmd1.StdoutPipe()if err != nil { log.Printf("pipeThruError: %v\n", err) return err}fd3 := os.NewFile(3, "/proc/self/fd/3")fd3.Write(cmd1stdout)pipeR.Read(cmd1stdout)pipeR.Close()pipeW.Close()fd3.Close()cmd3 = exec.Command("command", "-o", "-")stdin, stdinErr := cmd3.StdoutPipe()if stdinErr != nil { log.Printf("pipeThruFStdinErr: %v\n", stdinErr) return stdinErr}cmd3.Start()cmd2.Stdin = stdin编辑:添加了完整范围目标是让 cmd2 通过 cmd3 接受输入Stdin,并让 cmd1 输出通过管道传输ExtraFiles
1 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
这些类型在这里并不完全一致。具体来说,
cmd.StdoutPipe
返回一个io.ReadCloser
然而
pipeR.Read
期待[]byte
作为输入。
我相信您最终希望利用os 包的读取和写入功能来完成您的任务,如下所示:
package main
import (
"log"
"os"
"os/exec"
)
func main() {
cmd := exec.Command("command", "-o", "-")
pipeR, pipeW, _ := os.Pipe()
cmd.ExtraFiles = []*os.File{
pipeW,
}
cmd.Start()
cmdstdout, err := cmd.StdoutPipe()
if err != nil {
log.Printf("pipeThruError: %v\n", err)
os.Exit(1)
}
buf := make([]byte, 100)
cmdstdout.Read(buf)
pipeR.Close()
pipeW.Close()
fd3 := os.NewFile(3, "/proc/self/fd/3")
fd3.Write(buf)
fd3.Close()
}
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消