歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 讓Go語言調用外部程序時支持管道符

讓Go語言調用外部程序時支持管道符

日期:2017/3/1 9:52:44   编辑:Linux編程

有一個需求是用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()
  }

Copyright © Linux教程網 All Rights Reserved