如何解决在Golang中运行外部python,捕获连续的exec.Command Stdout?
cmd.Start()cmd.Wait()cmd.Run()
运行将启动指定的命令并等待其完成。
启动将启动指定的命令,但不等待其完成。
等待等待命令退出。它必须已经由“开始”启动。
cmd.StdoutPipe()cmd.StderrPipe()bufio.NewScanner()
package main
import (
"bufio"
"fmt"
"io"
"os/exec"
)
func main() {
cmd := exec.Command("python", "game.py")
stdout, err := cmd.StdoutPipe()
if err != nil {
panic(err)
}
stderr, err := cmd.StderrPipe()
if err != nil {
panic(err)
}
err = cmd.Start()
if err != nil {
panic(err)
}
go copyOutput(stdout)
go copyOutput(stderr)
cmd.Wait()
}
func copyOutput(r io.Reader) {
scanner := bufio.NewScanner(r)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
以下是用于再现实时输出的示例python代码。可以在Python中缓冲标准输出。可能需要显式冲洗。
import time
import sys
while True:
print "Hello"
sys.stdout.flush()
time.sleep(1)