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")
}

在线调试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用widgets框架的交互式K线代码示例: ```python import pandas as pd import plotly.graph_objs as go import plotly.offline as pyo import ipywidgets as widgets # 导入数据 data = pd.read_csv('stock_data.csv') data['Date'] = pd.to_datetime(data['Date']) data = data.set_index('Date') # 创建交互式控件 start_date = widgets.DatePicker( description='开始日期', value=data.index[0], disabled=False ) end_date = widgets.DatePicker( description='结束日期', value=data.index[-1], disabled=False ) ma_days = widgets.IntSlider( value=20, min=1, max=50, step=1, description='移动平均天数:', disabled=False, continuous_update=False, orientation='horizontal', readout=True, readout_format='d' ) # 创建图表 def create_figure(start_date, end_date, ma_days): # 选择数据 filtered_data = data.loc[start_date:end_date] # 计算移动平均线 ma = filtered_data['Close'].rolling(ma_days).mean() # 创建K线图表 trace1 = go.Candlestick(x=filtered_data.index, open=filtered_data['Open'], high=filtered_data['High'], low=filtered_data['Low'], close=filtered_data['Close'], name='股票价格') # 创建移动平均线图表 trace2 = go.Scatter(x=ma.index, y=ma, mode='lines', line=dict(color='orange', width=2), name='移动平均线') # 组合图表 data = [trace1, trace2] layout = go.Layout(title='股票价格走势图', xaxis=dict(title='日期'), yaxis=dict(title='价格')) fig = go.Figure(data=data, layout=layout) # 显示图表 pyo.iplot(fig) # 创建交互式界面 widgets.interactive(create_figure, start_date=start_date, end_date=end_date, ma_days=ma_days) ``` 在这个示例中,我们使用了pandas和plotly库来处理和显示股票数据。使用widgets框架,我们创建了三个控件:DatePicker控件用于选择开始日期和结束日期,IntSlider控件用于选择移动平均线的天数。然后,我们定义了一个函数create_figure来创建图表,并使用widgets.interactive函数来创建交互式界面。在交互式界面中,当用户更改控件的值时,create_figure函数将被调用并生成新的图表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值