3 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
make menuconfig我在嘗試通過(guò) golang運(yùn)行 linux 時(shí)遇到了這個(gè)問(wèn)題os/exec。
要完成您想要實(shí)現(xiàn)的目標(biāo),請(qǐng)嘗試將其設(shè)置cmd.Stdin為os.Stdin. 這是一個(gè)工作示例:
package main
import (
"fmt"
"os"
"os/exec"
)
type cmdWithEnv struct {
pwd string
command string
cmdArgs []string
envs []string
}
func runCommand(s cmdWithEnv) error {
cmd := exec.Command(s.command, s.cmdArgs...)
if len(s.pwd) != 0 {
cmd.Dir = s.pwd
}
env := os.Environ()
env = append(env, s.envs...)
cmd.Env = env
fmt.Printf("%v\n", cmd)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin // setting this allowed me to interact with ncurses interface from `make menuconfig`
err := cmd.Start()
if err != nil {
return err
}
if err := cmd.Wait(); err != nil {
return err
}
return nil
}
func buildPackage() {
makeKernelConfig := cmdWithEnv{
pwd: "linux",
command: "make",
cmdArgs: []string{"-j12", "menuconfig"},
envs: []string{"CROSS_COMPILE=ccache arm-linux-gnueabihf-", "ARCH=arm"},
}
runCommand(makeKernelConfig)
}
func main() {
buildPackage()
}

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
解決此問(wèn)題的一種方法是使用命令行標(biāo)志:
package main
import (
? ? "flag"
? ? "fmt"
? ? "math"
)
func main() {
? ? var (
? ? ? ? name = flag.String("name", "John", "Enter your name.")
? ? ? ? ip? ?= flag.Int("ip", 12345, "What is your ip?")
? ? )
? ? flag.Parse()
? ? fmt.Println("name:", *name)
? ? fmt.Println("ip:", *ip)
}
name現(xiàn)在您可以使用和標(biāo)志運(yùn)行程序ip:
go run main.go -name="some random name" -ip=12345678910`
some random name
ip: 12345678910

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
解決方案 1
您可以使用printf命令繞過(guò)它
cmd := "printf 'John Doe\nNew York\n35' | myInteractiveCmd"
out, err := exec.Command("bash", "-c", cmd).Output()
方案二
你可以使用io.Pipe()。Pipe creates a synchronous in-memory pipe您可以將答案寫(xiě)入io.Writer,您的 cmd 將從io.Reader.
r, w := io.Pipe()
cmd := exec.Command("myInteractiveCmd")
cmd.Stdin = r
go func() {
fmt.Fprintf(w, "John Doe\n")
fmt.Fprintf(w, "New York\n")
fmt.Fprintf(w, "35\n")
w.Close()
}()
cmd.Start()
cmd.Wait()
測(cè)試信息 為了對(duì)此進(jìn)行測(cè)試,我編寫(xiě)了 cmd,它詢問(wèn)姓名、城市、年齡并將結(jié)果寫(xiě)入文件。
reader := bufio.NewReader(os.Stdin)
fmt.Print("Name: ")
name, _ := reader.ReadString('\n')
name = strings.Trim(name, "\n")
...
- 3 回答
- 0 關(guān)注
- 361 瀏覽
添加回答
舉報(bào)