为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式为 os.Process 编写 stdin

以编程方式为 os.Process 编写 stdin

Go
慕虎7371278 2021-08-23 16:50:05
更新:要以编程方式“驱动” bash,您需要一个伪终端(PTY)。这就是我要找的:https://github.com/kr/ptypackage mainimport (    "github.com/kr/pty"    "io"    "os"    "os/exec")func main() {    c := exec.Command("grep", "--color=auto", "bar")    f, err := pty.Start(c)    if err != nil {        panic(err)    }    go func() {        f.Write([]byte("foo\n"))        f.Write([]byte("bar\n"))        f.Write([]byte("baz\n"))        f.Write([]byte{4}) // EOT    }()    io.Copy(os.Stdout, f)}给出以下示例:package mainimport (    "fmt"    "os")func main() {    attr := &os.ProcAttr{        Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},    }    process, err := os.StartProcess("/bin/bash", nil, attr)    if err != nil {        fmt.Printf("process err %v\n", err)        return    }    state, err := process.Wait()    if err != nil {        fmt.Printf("wait err %v\n", err)    }    fmt.Printf("'%+v'\n", state)}我可以bash按预期运行:go run proc.gobash-3.2$ echo foofoobash-3.2$ exitexit'exit status 0'但是,我想指定我自己的可写流os.Stdin,当我尝试将文件 ( os.Open("/my/file"))传递给它时,该进程将该文件作为标准输入并在io.EOF. 如何创建一个“无限长”的可写文件?查看文档似乎我需要以os.OpenFile某种方式使用...
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

你不能。但是,您可以创建一个 os.Pipe() 并将您的文件推送到一侧。只要您不关闭管道,它将是无限的。


查看完整回答
反对 回复 2021-08-23
  • 1 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信