Golang编程之os/exec命令使用

梦想与她 提交于 2019-11-28 20:07:02

Package exec

import "os/exec"

package exec运行外部命令。它包装os.startprocess,以便重新映射stdin和stdout、将I/O与管道连接以及进行其他调整。


目录

1. 协程执行命令

2. 阻塞执行命令

3. 实时输出命令

4. 阻塞输出命令


1. 协程执行命令

func CmdSyncExec(name string, arg ...string) error {
    cmd := exec.Command(name, arg...)
    if err := cmd.Start(); err != nil {
        return err
    }
    //wait for command to finishing ...
    if err := cmd.Wait(); err != nil {
        return err
    }
    return nil
}

2. 阻塞执行命令

func CmdBlockExec(name string, arg ...string) error {
    cmd := exec.Command(name, arg...)
	if err := cmd.Run(); err != nil {
		return err
	}
	return nil
}

3. 实时输出命令

func CmdSyncOutput(name string, arg ...string) error {
	cmd := exec.Command(name, arg...)
	stdout, err := cmd.StdoutPipe()
	if err != nil {
		return err
	}
	go func() {
		for {
			buf := make([]byte, 1024)
			if length, err := stdout.Read(buf); err != nil {
				break
			} else if err == nil && length > 0 {
				buf[length-1] = 0
				fmt.Printf("%s", buf)
			}
		}
	}()
	if err := cmd.Run(); err != nil {
		return err
	}
	return nil
}

4. 阻塞输出命令

func CmdBlockOutput(name string, arg ...string) error {
    out, err := exec.Command(name, arg...).out
	if err != nil {
		return err
	}
    fmt.Printf("%s", out)
	return nil
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!