在Go中运行Python命令

时间:2018-07-05 10:23:01

标签: go

我正在尝试以下代码:

package main
import ("fmt";  "log"; "os/exec")
func main() {
    cmd := exec.Command("/usr/bin/python3.5",  "-c",
        "import easygui as eg; print('Hello world'); eg.msgbox(msg='Hi there'); print('from Golang')")
    out, err := cmd.CombinedOutput()
    if err != nil {     log.Fatal(err)  }
    fmt.Printf(string(out)) }

我正在尝试先在终端上打印,然后显示gui消息框,然后再在终端上打印。

但是,它首先显示一个消息框,然后执行两个打印语句。

如何解决?

1 个答案:

答案 0 :(得分:1)

您的程序运行cmd.CombinedOutput(),该程序启动Python脚本(作为显示消息框的副作用)并将其stdout收集到变量中;然后执行一个fmt.Printf以打印出程序的输出。这将导致您看到的排序。

如果调用cmd.StdoutPipe(),则将得到一个io.Reader,该脚本具有脚本的标准输出。您有责任从管道中读取并复制到自己进程的标准输出中。 os/exec documentation has an example。您需要先cmd.Start(),然后从管道中读取所有内容,然后再cmd.Wait()进行清理。

您还可以直接分配cmd.Stdout = os.Stdout,然后分配cmd.Run()。在这种情况下,您将无法在程序中看到输出,但也不必将其复制。