go在windows下执行系统命令调用问题?求教

stuven · · 2219 次点击
stevewang
耶和华是我的牧者,我必不至缺乏。
可能只能分行提取吧,没有发现更好的方法。 ``` package main import ( "bytes" "fmt" "io" "os/exec" "strings" ) func main() { cmd := exec.Command("cmd.exe") out := &bytes.Buffer{} w, err := cmd.StdinPipe() if err != nil { panic(err) } cmd.Stdout = out if err := cmd.Start(); err != nil { panic(err) } io.WriteString(w, `echo "helloworld" | find /i "hello"`) io.WriteString(w, "\n") w.Close() if err := cmd.Wait(); err != nil { panic(err) } lines := strings.Split(out.String(), "\n") fmt.Println(lines[4]) } ```
#7
更多评论
stevewang
耶和华是我的牧者,我必不至缺乏。
管道`|`是在shell下才支持的,不能直接用于创建进程。
#1
stevewang
耶和华是我的牧者,我必不至缺乏。
在windows下应该是这样: ``` package main import ( "bytes" "fmt" "io" "os/exec" ) func main() { cmd := exec.Command("cmd.exe") out := &bytes.Buffer{} cmd.Stdout = out w, err := cmd.StdinPipe() if err != nil { panic(err) } if err := cmd.Start(); err != nil { panic(err) } io.WriteString(w, `echo "helloworld" | find /i "hello"`) io.WriteString(w, "\n") w.Close() if err := cmd.Wait(); err != nil { panic(err) } fmt.Println(out.String()) } ```
#2