Go实现非交互式调用交互式命令

背景

要执行的脚本是交互式的, 比如要输入用户密码, 希望自动输入,有python 实现,参考: python 使用 subprocess 实现交互式命令的非交互式执行

本地描述Go的实现

过程

要执行的脚本

#!/bin/bash

read -t 30 -p "Please input your username:" username
echo -e "\n"
echo "username is $username"

read -s -t 30 -p "Please input your Age:" age
echo -e "\n"
echo "Age is $age"

read -n 1 -t 30 -p "Please input your gender[M/F]" gender
echo -e "\n"
echo "gender is $gender"

需要输入, 用户名, 密码和性别
Go 使用 exec.cmd 调用

package main

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

func main() {
    //调用执行的脚本
    subProcess := exec.Command("./test.sh") 

    // 声明stdin, 用作输入
    stdin, err := subProcess.StdinPipe()
    if err != nil {
        fmt.Println(err)
    }
    // 结束后关闭stdin
    defer stdin.Close()

    // 输出执行过程
    subProcess.Stdout = os.Stdout
    subProcess.Stderr = os.Stderr

    fmt.Println("START")
    // 使用 Start 启动, 非阻塞式执行
    if err = subProcess.Start(); err != nil { 
        fmt.Println("An error occured: ", err)
    }

    // 输入参数
    io.WriteString(stdin, "Talon\n")
    io.WriteString(stdin, "18\n")
    io.WriteString(stdin, "M\n")

    // 等待执行完毕
    subProcess.Wait()
    fmt.Println("END")
}

你可能感兴趣的:(Go,golang,开发语言,后端)