min*_*oyo 5

cmd.Start()cmd.Wait()cmd.Run()

Run 启动指定的命令并等待它完成。

Start 启动指定的命令,但不等待它完成。

Wait 等待命令退出。它一定是由 Start 启动的。

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)
  • 我不知道 `game.py` 的实现,但标准输出可能在 Python 中缓冲。在 Python 中显式指定 `sys.stdout.flush()` 怎么样? (2认同)