golang执行命令操作 exec.Command_Golang_脚本之家

  • A+
所属分类:编程茶楼

golang执行命令操作 exec.Command

 更新时间:2020年12月23日 10:50:27   作者:WangPengJu__  

这篇文章主要介绍了golang执行命令操作 exec.Command,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

cmd := exec.Command("cmd")

 in := bytes.NewBuffer(nil)

 cmd.Stdin = in//绑定输入

 var out bytes.Buffer

 cmd.Stdout = &out //绑定输出

 go func() {

 in.WriteString("node E:/design/test.js\n")//写入你的命令,可以有多行,"\n"表示回车

 }()

 err = cmd.Start()

 if err != nil {

 log.Fatal(err)

 }

 log.Println(cmd.Args)

 err = cmd.Wait()

 if err != nil {

 log.Printf("Command finished with error: %v", err)

 }

 fmt.Println(out.String())

补充:golang 执行外部命令 超时处理 exec.CommandContext

使用exec.CommandContext来处理外部命令的超时

1

2

3

4

5

6

7

8

9

10

11

12

13

14

func main() {

  timeout := 5

  ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout+5)*time.Second)

  defer cancel()

  cmdarray := []string{"-c", fmt.Sprintf("%s %s", "sleep", "10")}

  cmd := exec.CommandContext(ctx, "bash", cmdarray...)

  out, err := cmd.CombinedOutput()

  //if ctx.Err() == context.DeadlineExceeded {}

  fmt.Printf("ctx.Err : [%v]\n", ctx.Err())

  fmt.Printf("error  : [%v]\n", err)

  fmt.Printf("out   : [%s]\n", string(out))

}

运行结果是:

1

2

3

ctx.Err : [context deadline exceeded]

error  : [signal: killed]

out   : []

golang执行命令操作 exec.Command_Golang_脚本之家

如果是一个命令错误输出是什么:

下面这个例子是使用sleep不带参数,显示是错误的。

cmdarray := []string{"-c", fmt.Sprintf("%s %s", "sleep", "")}

1

2

3

4

ctx.Err : [<nil>]

error  : [exit status 1]

out   : [usage: sleep seconds

]

可以命令的执行错误不会导致ctx.Err()错误。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

golang执行命令操作 exec.Command_Golang_脚本之家

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/a19352226/article/details/53747323

相关文章

  • go语言制作端口扫描器

    go语言制作端口扫描器

    本文给大家分享的是使用go语言编写的TCP端口扫描器,可以选择IP范围,扫描的端口,以及多线程,有需要的小伙伴可以参考下。

    2015-03-03

  • golang1.16新特性速览(推荐)

    golang1.16新特性速览(推荐)

    这篇文章主要介绍了golang1.16新特性速览,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    2021-02-02

  • Go语言指针访问结构体的方法

    Go语言指针访问结构体的方法

    这篇文章主要介绍了Go语言指针访问结构体的方法,涉及Go语言指针及结构体的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    2015-02-02

  • Go语言转换所有字符串为大写或者小写的方法

    Go语言转换所有字符串为大写或者小写的方法

    这篇文章主要介绍了Go语言转换所有字符串为大写或者小写的方法,实例分析了ToLower和ToUpper函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    2015-02-02

  • GoLang中Json Tag用法实例总结

    GoLang中Json Tag用法实例总结

    这篇文章主要给大家介绍了关于GoLang中Json Tag用法的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    2022-02-02

  • golang中defer的关键特性示例详解

    golang中defer的关键特性示例详解

    defer是golang语言中的关键字,用于资源的释放,会在函数返回之前进行调用。下面这篇文章主要给大家介绍了关于golang中defer的关键特性,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

    2017-08-08

  • go实现redigo的简单操作

    go实现redigo的简单操作

    golang操作redis主要有两个库,go-redis和redigo,今天我们就一起来介绍一下redigo的实现方法,需要的朋友可以参考下

    2018-07-07

  • 详解玩转直播系列之消息模块演进

    详解玩转直播系列之消息模块演进

    本篇文章针对秀场直播,简单地描述一下消息模型,说明一下我们消息模型的架构,并结合我们一年以来,通过处理不同的业务线上问题,来进行演进式的消息模型架构的升级与调整,将此整理成文,并分享給大家

    2021-06-06

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin