Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 让Go语言调用外部程序时支持管道符

有一个需求是用go语言程序调用外部命令时,允许使用管道符,如 ls | wc -lGo语言对外部命令的调用进行了一定的封装,下面来试一下: 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()
}相关阅读:Ubuntu 安装Go语言包 http://www.linuxidc.com/Linux/2013-05/85171.htm《Go语言编程》高清完整版电子书 http://www.linuxidc.com/Linux/2013-05/84709.htmGo语言并行之美 -- 超越 “Hello World” http://www.linuxidc.com/Linux/2013-05/83697.htm我为什么喜欢Go语言 http://www.linuxidc.com/Linux/2013-05/84060.htm