尝试从Golang执行python 2.7代码时出现EOF错误
我一直在尝试使用我在go中编写的代码中的python实用程序。我一直在尝试使用stdin/stdout在进程之间进行通信。但是,使用python的尝试从Golang执行python 2.7代码时出现EOF错误,go,Go,我一直在尝试使用我在go中编写的代码中的python实用程序。我一直在尝试使用stdin/stdout在进程之间进行通信。但是,使用python的raw\u input(),即使我将其stdin连接到go的stdin,也会出现EOF错误 以下是重现问题的代码: test.go: package main import ( "os" "os/exec" ) func main() { cmd := exec.Command("python", "test.py")
raw\u input()
,即使我将其stdin连接到go的stdin,也会出现EOF错误
以下是重现问题的代码:
test.go:
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)
}
}
test.py:
while True:
input = raw_input()
print input
我得到的错误是
Traceback (most recent call last):
File "test.py", line 3, in <module>
input = raw_input()
EOFError
回溯(最近一次呼叫最后一次):
文件“test.py”,第3行,在
输入=原始输入()
伊奥费罗
我不明白为什么这会成为一个问题。有人有任何输入吗?当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)
}
}
当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)
}
}
啊,我明白了。这是有道理的。那么,如果我想让python脚本无限期地运行呢?对我来说,启动一个新的goroutine,在那里启动python进程,然后从该例程执行cmd.Wait()有意义吗?谢谢啊,我明白了。这是有道理的。那么,如果我想让python脚本无限期地运行呢?对我来说,启动一个新的goroutine,在那里启动python进程,然后从该例程执行cmd.Wait()有意义吗?谢谢