将标准输入提示与子进程的输出相结合

问题描述 投票:0回答:0

假设我有一个程序,它只接受输入并对其进行一些处理。 像这样

myprog.go

package main

import (
    "fmt"
)

func main() {
    var i int
    fmt.Print("Type a number: ")
    fmt.Scan(&i)
    fmt.Println("Incremented:", i+1)
}

现在我编译这个并将这个程序称为这样的子进程

testsub.go

package main

import (
    "fmt"
    "io"
    "os/exec"
)

func main() {
    subProcess := exec.Command("./myprog")

    go func() {
        stdin, err := subProcess.StdinPipe()
        defer stdin.Close()
        if err != nil {
            panic(err)
        }
        io.WriteString(stdin, "33")

    }()
    output, err := subProcess.CombinedOutput()
    if err != nil {
        panic(err)
    }
    fmt.Print(string(output))
}

我得到的输出是

Type a number: Incremented: 34

我写入stdin的提示没有显示。我假设这是因为输出被写入子进程的标准输出。是否有可能获得以下输出而不需要像修改输出文本这样的 hacky 解决方法。?

Type a number: 33
Incremented: 34
go subprocess
© www.soinside.com 2019 - 2024. All rights reserved.