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

Golang exec.Command - 对话框

Golang exec.Command - 对话框

Go
qq_笑_17 2023-06-01 18:03:11
Go 程序运行带参数的外部 soft.exe:cmd := exec.Command("soft.exe", "-text") out, _ := cmd.CombinedOutput() fmt.Printf("%s", out)soft.exe 文件有一些输出和等待输入值,例如:请选择代码:1、2、3、4在 shell 窗口中以通常的方式,我只需键入“1”并按 Enter,soft.exe 就会给我结果。谢谢,您的代码是 [some number]如何在运行后填充“1”并使用 GoLang 获取输出?在我的示例中,运行 soft.exe 后它会立即完成“请选择代码:1、2、3、4”的工作。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您需要将 os.Stdin 重定向到 cmd.Stdin,将 os.Stdout 重定向到 cmd.Stdout

在 godoc 中查看: https: //golang.org/pkg/os/exec/#Cmd

   // Stdin specifies the process's standard input.
   //
   // If Stdin is nil, the process reads from the null device (os.DevNull).
   //
   // If Stdin is an *os.File, the process's standard input is connected
   // directly to that file.
   //
   // Otherwise, during the execution of the command a separate
   // goroutine reads from Stdin and delivers that data to the command
   // over a pipe. In this case, Wait does not complete until the goroutine
   // stops copying, either because it has reached the end of Stdin
   // (EOF or a read error) or because writing to the pipe returned an error.
   Stdin io.Reader

此示例在 Windows 上进行了测试。

package main


import (

    "fmt"

    "os"

    "os/exec"

)


func main() {

    cmd := exec.Command("yo")

    cmd.Stderr = os.Stderr

    cmd.Stdout = os.Stdout

    cmd.Stdin = os.Stdin

    if err := cmd.Run(); err != nil {

        fmt.Println(err.Error())

        os.Exit(1)

    }


}


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

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