1. // exec基础使用
  2. import (
  3. "os/exec"
  4. )
  5. cmd = exec.Command("C:\\cygwin64\\bin\\bash.exe", "-c", "echo 1")
  6. err = cmd.Run()
  1. // 捕获输出
  2. cmd = exec.Command("C:\\cygwin64\\bin\\bash.exe", "-c", "/usr/bin/python xxx.py")
  3. output, err = cmd.CombinedOutput() // 执行了命令, 捕获了子进程的输出(pipe)
  4. fmt.Println(string(output))
  1. // 1s超时后,kill程序(强制终止/超时终止)
  2. func main() {
  3. // 执行1个cmd, 让它在一个协程里去执行, 让它执行2秒: sleep 2; echo hello;
  4. // 1秒的时候, 我们杀死cmd
  5. var (
  6. ctx context.Context
  7. cancelFunc context.CancelFunc
  8. cmd *exec.Cmd
  9. resultChan chan *result
  10. res *result
  11. )
  12. // 创建了一个结果队列
  13. resultChan = make(chan *result, 1000)
  14. // context: chan byte
  15. // cancelFunc: close(chan byte)
  16. ctx, cancelFunc = context.WithCancel(context.TODO())
  17. go func() {
  18. var (
  19. output []byte
  20. err error
  21. )
  22. cmd = exec.CommandContext(ctx, "bash", "-c", "sleep 2;echo hello;")
  23. // 执行任务, 捕获输出
  24. output, err = cmd.CombinedOutput()
  25. // 把任务输出结果, 传给main协程
  26. resultChan <- &result{
  27. err: err,
  28. output: output,
  29. }
  30. }()
  31. // 继续往下走
  32. time.Sleep(1 * time.Second)
  33. // 取消上下文
  34. cancelFunc()
  35. // 在main协程里, 等待子协程的退出,并打印任务执行结果
  36. res = <- resultChan
  37. // 打印任务执行结果
  38. fmt.Println(res.err, string(res.output))
  39. }

[go]os/exec执行shell命令的更多相关文章

  1. golang os/exec 执行外部命令

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (st ...

  2. expect中使用exec执行shell命令

    今天想在expect脚本中获取本机ip,执行脚本是报错,脚本如下: set localip [exec ifconfig eth0 | grep Mask | cut -d: -f2 | awk '{ ...

  3. [golang][译]使用os/exec执行命令

    [golang][译]使用os/exec执行命令 https://colobu.com/2017/06/19/advanced-command-execution-in-Go-with-os-exec ...

  4. Android 用java语言执行Shell命令

    最近项目中需要用到java语言来执行shell命令,在网上查了资料, 把自己在项目里用到的命令整理成了工具类开放给大家,希望对大家有用.功能不全,后期我会慢慢添加整合. public class Sh ...

  5. java 执行shell命令及日志收集避坑指南

    有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...

  6. subprocess模块还提供了很多方便的方法来使得执行 shell 命令

    现在你可以看到它正常地处理了转义. 注意 实际上你也可以在shell=False那里直接使用一个单独的字符串作为参数, 但是它必须是命令程序本身,这种做法和在一个列表中定义一个args没什么区别.而如 ...

  7. nodejs 执行shell 命令

    有需要从前端操作服务器执行shell命令的需求 建立一个process.js文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var process =  ...

  8. python(6)-执行shell命令

    可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 commands.* ...

  9. Android执行shell命令

    一.方法 /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/bin/cat", &q ...

随机推荐

  1. ASE19团队项目alpha阶段model组 scrum4 记录

    本次会议于11月6日,19时整在微软北京西二号楼sky garden召开,持续50分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing W ...

  2. 为什么有了uwsgi还要nginx这个“前端”服务器

    相信每一个使用nginx+uwsgi+django部署过的人,都感到非常复杂.到底为什么一个项目的发布要经过这么多层级,他们每一层有什么理由存在?这就带大家宏观地看待一下 首先nginx 是对外的服务 ...

  3. kafka启动失败错误:: replica.fetch.max.bytes should be equal or greater than message.max.bytes

    1 详细异常 2019-10-14 14:38:21,260 FATAL kafka.Kafka$: java.lang.IllegalArgumentException: requirement f ...

  4. TLV320AIC3268寄存器读写

    该芯片支持I2C和SPI读写寄存器,本人用的是SPI1接口. 以下是对手册中SPI接口读写寄存器相关内容的翻译(英文版可以看手册的94页~) 在SPI控制模式下,TLV320AIC3268使用SCL_ ...

  5. 解决Ubuntu下ssh无法启动

    Ubuntu  ssh一直无法启动. 通过 systemctl status ssh.service  查看到的错误是 Dec 16 13:35:22 iZm5eckxl2tqyka9eoe7b3Z ...

  6. Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

    当出现警告的时候,恭喜你,你已经离成功很近了. 远程主机这里设为slave2,用户为Hadoop. 本地主机设为slave1 以下都是在远程主机slave2上的配置,使得slave1可以免密码连接到s ...

  7. mybayis项目使用的Mapping文件使用总结参考(二)

    针对in字句中的数组使用方法 <select id="getCpProfileNamesByIds" resultType="string"> se ...

  8. PHP mysqli_num_rows() 函数

    <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect("localhost","root& ...

  9. SQL Server text field里面有换行符的时候copy到excel数据会散乱

    解决方法: select '"'+convert(varchar(8000),testField)+'"'astestField from testTable 这样虽然结果集里面有 ...

  10. a a[0] &a &a[0]的理解

    数组中几个关键符号(a a[0] &a &a[0])的理解(前提是 int a[10])(1)这4个符号搞清楚了,数组相关的很多问题都有答案了.理解这些符号的时候要和左值右值结合起来, ...