gpt4 book ai didi

go - 如何让标准输入在 golang 中执行 cmd

转载 作者:IT老高 更新时间:2023-10-28 13:06:12 25 4
gpt4 key购买 nike

我有这个代码

subProcess := exec.Cmd{
Path: execAble,
Args: []string{
fmt.Sprintf("-config=%s", *configPath),
fmt.Sprintf("-serverType=%s", *serverType),
fmt.Sprintf("-reload=%t", *reload),
fmt.Sprintf("-listenFD=%d", fd),
},
Dir: here,
}
subProcess.Stdout = os.Stdout
subProcess.Stderr = os.Stderr
logger.Info("starting subProcess:%s ", subProcess.Args)

if err := subProcess.Run(); err != nil {
logger.Fatal(err)
}

然后我执行 os.Exit(1) 来停止主进程

我可以从子进程中获取输出

但我也想把标准输入放到

我试试

subProcess.Stdin = os.Stdin

但它不起作用

最佳答案

我做了一个简单的程序(用于测试)。它读取一个数字并将给定的数字写出来。

package main

import (
"fmt"
)

func main() {
fmt.Println("Hello, What's your favorite number?")
var i int
fmt.Scanf("%d\n", &i)
fmt.Println("Ah I like ", i, " too.")
}

这是修改后的代码

package main

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

func main() {
subProcess := exec.Command("go", "run", "./helper/main.go") //Just for testing, replace with your subProcess

stdin, err := subProcess.StdinPipe()
if err != nil {
fmt.Println(err) //replace with logger, or anything you want
}
defer stdin.Close() // the doc says subProcess.Wait will close it, but I'm not sure, so I kept this line

subProcess.Stdout = os.Stdout
subProcess.Stderr = os.Stderr

fmt.Println("START") //for debug
if err = subProcess.Start(); err != nil { //Use start, not run
fmt.Println("An error occured: ", err) //replace with logger, or anything you want
}

io.WriteString(stdin, "4\n")
subProcess.Wait()
fmt.Println("END") //for debug
}

您对这些线路感兴趣

stdin, err := subProcess.StdinPipe()
if err != nil {
fmt.Println(err)
}
defer stdin.Close()
//...
io.WriteString(stdin, "4\n")
//...
subProcess.Wait()

上面几行的解释

  1. 我们获得了子进程的标准输入,现在我们可以写入它了
  2. 我们用我们的力量写一个数字
  3. 我们等待子流程完成

输出

START
Hello, What's your favorite number?
Ah I like 4 too.
END

For better understanding

关于go - 如何让标准输入在 golang 中执行 cmd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23166468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com