尝试从Golang执行python 2.7代码时出错EOF

时间:2017-11-29 00:33:21

标签: go

我一直在尝试使用我编写的代码中的python实用程序。我一直在尝试使用stdin / stdout在进程之间进行通信。但是,即使我将stdin连接到stdin,我也会使用python' s package main import ( "os" "os/exec" ) func main() { cmd := exec.Command("python", "test.py") cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout cmd.Stdin = os.Stdin // Start the process if err := cmd.Start(); err != nil { panic(err) } } 收到EOF错误。

以下是重现此问题的代码:

test.go:

while True:
    input = raw_input()
    print input

test.py:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    input = raw_input()
EOFError

我得到的错误是

{{1}}

我不明白为什么这会成为一个问题。有人有任何意见吗?

1 个答案:

答案 0 :(得分:2)

cmd.Start()返回时,运行test.go的进程退出并关闭其标准输入;所以,运行test.py的进程收到EOF。

修改test.go,在最后一个块之后添加cmd.Wait()之类的内容,甚至是time.Sleep(300 * time.Second)之类的内容,然后您就会看到您的预期。

例如:

package main

import (
        "fmt"
        "os"
        "os/exec"
) 

func main() {
        cmd := exec.Command("python", "test.py")

        cmd.Stderr = os.Stderr
        cmd.Stdout = os.Stdout
        cmd.Stdin = os.Stdin

        // Start the process
        if err := cmd.Start(); err != nil {
                panic(err)
        }
        if err := cmd.Wait(); err != nil { 
                fmt.Println("cmd.Wait() in parent process:", err)
        }
}