• golang+read_file+call_shell+goroutine


    package main
    
    import (
            "bufio"
            "bytes"
            "fmt"
            "os"
            "os/exec"
            "sync"
    )
    
    //call shell
    func call_shell(script_name string, script_args string) (string, string, error) {
            var script_stdout bytes.Buffer
            var script_stderr bytes.Buffer
            cmd := exec.Command("/bin/bash", script_name, script_args)
            cmd.Stdout = &script_stdout
            cmd.Stderr = &script_stderr
            err := cmd.Run()
            return script_stdout.String(), script_stderr.String(), err
    }
    
    func main() {
    
            var wg sync.WaitGroup
    
            //Open file
            file_path, _ := os.Getwd()
            file, err := os.Open(file_path + "/db_list")
            if err != nil {
                    fmt.Print("Open file error")
            }
            defer file.Close()
            //Read file line by line
            scanner := bufio.NewScanner(file)
            for scanner.Scan() {
                    wg.Add(1)
                    go func(db_name string) {
                            defer wg.Done()
                            shell_path := "/opt/go_workspace/script/auto_dump.sh"
                            script_stdout, script_stderr, _ := call_shell(shell_path, db_name)
                            fmt.Printf("Dump db log for %s
    %s
    %s
    ", db_name, script_stdout, script_stderr)
                    }(scanner.Text())
    
            }
    
            wg.Wait()
    }
    

      

  • 相关阅读:
    函数
    vue中v-for循环如何将变量带入class的属性名中
    代码规范 前端导航
    2019.8.5 mysql 删除 更新
    2019.8.1
    2019.7.31 Xshell简单学习
    日常使用知识点
    FormData实现文件多次添加累加上传和选择删除
    上传图片
    验证码
  • 原文地址:https://www.cnblogs.com/divl/p/14949901.html
Copyright © 2020-2023  润新知