我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用golang执行Linux shell命令

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用golang执行Linux shell命令

这篇文章主要讲解了“怎么使用golang执行Linux shell命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用golang执行Linux shell命令”吧!

1. 执行命令并获得输出结果

CombinedOutput()

执行程序返回 standard output and standard error

func main() {    cmd := exec.Command("ls", "-lah")    out, err := cmd.CombinedOutput()    if err != nil {        log.Fatalf("cmd.Run() failed with %s\n", err)    }    fmt.Printf("combined out:\n%s\n", string(out))}

Output()

执行程序返回standard output

func main() {    out, err := exec.Command("date").Output()    if err != nil {        log.Fatal(err)    }    fmt.Printf("The date is %s\n", out)}

2. 将stdout和stderr分别处理

用buffer接受输出

func main() {    cmd := exec.Command("ls", "-lah")    var stdin, stdout, stderr bytes.Buffer    cmd.Stdin = &stdin    cmd.Stdout = &stdout    cmd.Stderr = &stderr    err := cmd.Run()    if err != nil {        log.Fatalf("cmd.Run() failed with %s\n", err)    }    outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())    fmt.Printf("out:\n%s\nerr:\n%s\n", outStr, errStr)}

直接打印到屏幕

func main() {    cmd := exec.Command("ls", "-lah")    cmd.Stdout = os.Stdout    cmd.Stderr = os.Stdout    err := cmd.Run()    if err != nil {        log.Fatalf("cmd.Run() failed with %s\n", err)    }}

3. 异步执行命令

cmd.Run() 阻塞等待命令执行结束
cmd.Start() 不会等待命令完成

package mainimport (    "bytes"    "fmt"    "io"    "log"    "os"    "os/exec")func main() {    var stdoutBuf, stderrBuf bytes.Buffer    cmd := exec.Command("bash", "-c", "for i in 1 2 3 4;do echo $i;sleep 2;done")    stdoutIn, _ := cmd.StdoutPipe()    stderrIn, _ := cmd.StderrPipe()    var errStdout, errStderr error    stdout := io.MultiWriter(os.Stdout, &stdoutBuf)    stderr := io.MultiWriter(os.Stderr, &stderrBuf)    err := cmd.Start()    if err != nil {        log.Fatalf("cmd.Start() failed with '%s'\n", err)    }    go func() {        _, errStdout = io.Copy(stdout, stdoutIn)    }()    go func() {        _, errStderr = io.Copy(stderr, stderrIn)    }()    err = cmd.Wait()    if err != nil {        log.Fatalf("cmd.Run() failed with %s\n", err)    }    if errStdout != nil || errStderr != nil {        log.Fatal("failed to capture stdout or stderr\n")    }    outStr, errStr := string(stdoutBuf.Bytes()), string(stderrBuf.Bytes())    fmt.Printf("\nout:\n%s\nerr:\n%s\n", outStr, errStr)}

4. 执行时带上环境变量

func main() {    cmd := exec.Command("bash", "-c", "programToExecute")    additionalEnv := "programToExecute=ls"    newEnv := append(os.Environ(), additionalEnv)    cmd.Env = newEnv    out, err := cmd.CombinedOutput()    if err != nil {        log.Fatalf("cmd.Run() failed with %s\n", err)    }    fmt.Printf("%s", out)}

5. 预先检查命令是否存在

func checkLsExists() {    path, err := exec.LookPath("ls")    if err != nil {        fmt.Printf("didn't find 'ls' executable\n")    } else {        fmt.Printf("'ls' executable is in '%s'\n", path)    }}

6. 两个命令依次执行,管道通信

func main() {    c1 := exec.Command("ls")    c2 := exec.Command("wc", "-l")    r, w := io.Pipe()     c1.Stdout = w    c2.Stdin = r    var b2 bytes.Buffer    c2.Stdout = &b2    c1.Start()    c2.Start()    c1.Wait()    w.Close()    c2.Wait()    io.Copy(os.Stdout, &b2)}

或者

func main() {    c1 := exec.Command("ls")    c2 := exec.Command("wc", "-l")    c2.Stdin, _ = c1.StdoutPipe()    c2.Stdout = os.Stdout    _ = c2.Start()    _ = c1.Run()    _ = c2.Wait()}

反正下面这样是不行的

func main() {    c := exec.Command("ls", "|", "wc", "-l")    c.Stdout = os.Stdout    _ = c.Run()}

不嫌丑可以用bash -c

func main() {    cmd := "cat /proc/cpuinfo | egrep '^model name' | uniq | awk '{print substr($0, index($0,$4))}'"    out, err := exec.Command("bash", "-c", cmd).Output()    if err != nil {        fmt.Printf("Failed to execute command: %s", cmd)    }    fmt.Println(string(out))}

7. 按行读取输出内容

func main() {    cmd := exec.Command("ls", "-la")    stdout, _ := cmd.StdoutPipe()    cmd.Start()    reader := bufio.NewReader(stdout)    for {        line, err := reader.ReadString('\n')        line = strings.TrimSpace(line)        if err != nil || io.EOF == err {            break        }        log.Println(line)    }    cmd.Wait()}

8. 获得exit code

func RunCommand(name string, args ...string) (stdout string, stderr string, exitCode int) {    log.Println("run command:", name, args)    var outbuf, errbuf bytes.Buffer    cmd := exec.Command(name, args...)    cmd.Stdout = &outbuf    cmd.Stderr = &errbuf    err := cmd.Run()    stdout = outbuf.String()    stderr = errbuf.String()    if err != nil {        // try to get the exit code        if exitError, ok := err.(*exec.ExitError); ok {            ws := exitError.Sys().(syscall.WaitStatus)            exitCode = ws.ExitStatus()        } else {            // This will happen (in OSX) if `name` is not available in $PATH,            // in this situation, exit code could not be get, and stderr will be            // empty string very likely, so we use the default fail code, and format err            // to string and set to stderr            log.Printf("Could not get exit code for failed program: %v, %v", name, args)            exitCode = defaultFailedCode            if stderr == "" {                stderr = err.Error()            }        }    } else {        // success, exitCode should be 0 if go is ok        ws := cmd.ProcessState.Sys().(syscall.WaitStatus)        exitCode = ws.ExitStatus()    }    log.Printf("command result, stdout: %v, stderr: %v, exitCode: %v", stdout, stderr, exitCode)    return}

感谢各位的阅读,以上就是“怎么使用golang执行Linux shell命令”的内容了,经过本文的学习后,相信大家对怎么使用golang执行Linux shell命令这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用golang执行Linux shell命令

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用golang执行Linux shell命令

这篇文章主要讲解了“怎么使用golang执行Linux shell命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用golang执行Linux shell命令”吧!1. 执行命令并获
2023-07-02

Golang怎么应用执行Shell命令

今天小编给大家分享一下Golang怎么应用执行Shell命令的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。exec包使用官方
2023-07-05

Linux命令行循环执行shell命令

目录linux命令行,循环执行shell命令死循环命令格式效果普通计数循环循环10次效果L编程inux shell循环命令 while死循环的用法Linux命令行,循环执行shell命令 死循环 命令格式 while true编程 ;do
2023-01-03

Golang应用执行Shell命令实战

本文主要介绍了Golang应用执行Shell命令实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-19

python怎么执行shell命令

在Python中可以使用`os`模块中的`system`函数来执行Shell命令。以下是一个示例:```pythonimport os# 执行ls命令os.system('ls')# 执行pwd命令,并获取输出结果result = os.p
2023-09-27

怎么用命令执行Shell脚本

本篇内容主要讲解“怎么用命令执行Shell脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用命令执行Shell脚本”吧!假设这个 shell 脚本的名称为 tinyshell.sh。在 L
2023-06-09

linux下如何执行shell命令

这篇文章将为大家详细讲解有关linux下如何执行shell命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。linux下执行shell命令有两种方法 在当前shell中执行shell命令在当前shell中
2023-06-09

详解golang执行Linux shell命令完整场景下的使用方法

目录1. 执行命令并获得输出结果2. 将stdout和stderr分别处理3. 异编程客栈步执行命令4. 执行时带上环境变量5. 预先检查命令是否存在6. 两个命令依次执行,管道通信7. 按行读取输出内容8. 获得exit code1. 执
2022-06-30

使用hbase-shell命令怎么批量执行脚本

今天就跟大家聊聊有关使用hbase-shell命令怎么批量执行脚本,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。批量执行hbase shell 命令#!/bin/bash sourc
2023-06-09

使用Spark-shell怎么批量命令执行脚本

这篇文章给大家介绍使用Spark-shell怎么批量命令执行脚本,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。批量执行spark-shell命令,并指定提交参数#!/bin/bashsource /etc/profil
2023-06-09

使用hive-shell命令怎么批量执行脚本

使用hive-shell命令怎么批量执行脚本?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如下所示:#!/usr/bin/bashHADOOP_HOME="/o
2023-06-09

JSch怎么远程执行Shell命令

这篇文章主要介绍了JSch怎么远程执行Shell命令,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JS是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释
2023-06-14

node怎么执行cmd或shell命令

这篇文章主要介绍“node怎么执行cmd或shell命令”,在日常操作中,相信很多人在node怎么执行cmd或shell命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”node怎么执行cmd或shell命令
2023-07-02

shell命令怎么在docker中执行

这篇文章将为大家详细讲解有关shell命令怎么在docker中执行,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在docker中执行shell命令,需要在命令前增加sh -c,例如:dock
2023-06-14

java怎么执行linux命令

在Java中执行Linux命令有以下几种方法:1. 使用Runtime类的exec()方法:这是最简单的方法,它可以直接执行一个命令,并返回一个Process对象,可以通过该对象获取命令执行的结果。```javaString command
2023-09-17

shell中使用expect命令进行远程执行命令脚本

expect是用来实现自动交互功能的工具之一,使用expect-send来实现交互过程。 注意: 1、脚本的执行方法与bash shell不一样,比如:expect example.sh 2、向一个
2022-06-04

怎么使用pv命令监控Linux命令的执行进度

小编给大家分享一下怎么使用pv命令监控Linux命令的执行进度,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PV 命令PV 由Andrew Wood 开发,是 P
2023-06-16

linux下执行shell命令方法简介

linux下执行shell命令有两种方法在当前shell中执行shell命令在当前shell中产生一个subshell,在subshell中执行shell命令1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输
2022-06-04

Python2.x利用commands模块执行Linux shell命令

用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要函数:1. commands.getou
2022-06-04

编程热搜

目录