设为首页 加入收藏

TOP

让Go语言调用外部程序时支持管道符
2014-11-24 02:36:40 来源: 作者: 【 】 浏览:2
Tags:语言 调用 外部 程序 支持 管道

有一个需求是用go语言程序调用外部命令时,允许使用管道符,如 ls | wc -l


Go语言对外部命令的调用进行了一定的封装,下面来试一下:


  package main
  
  import (
   "os"
   "os/exec"
  )
  
  func main() {
   run1()
  }
  
  func run1() {
   cmd := exec.Command("ls", "|", "wc", "-l")
  cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr
   cmd.Start()
   cmd.Run()
   cmd.Wait()
  }


  这样执行时,控制台会打出错误:


  ls: 无法访问|: 没有那个文件或目录


  ls: 无法访问wc: 没有那个文件或目录


  难道Go程序不能使用管道符命令吗?带这此问题,我查了大量的资料,终于发现应该这样写:


  package main
  
  import (
   "os"
   "os/exec"
  )
  
  func main() {
   run1()
   run2()
  }
  
  func run1() {
   cmd := exec.Command("ls", "|", "wc", "-l")
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr
   cmd.Start()
   cmd.Run()
   cmd.Wait()
  }
  
  func run2() {
   c1 := exec.Command("ls")
   c2 := exec.Command("wc", "-l")
   c2.Stdin, _ = c1.StdoutPipe()
   c2.Stdout = os.Stdout
   c2.Stderr = os.Stderr
   c2.Start()
   c1.Run()
   c2.Wait()
  }


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇迅雷2014校招笔试题之多线程编程 下一篇Golang通过Thrift框架完美实现跨..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: