我一直在尝试使用我编写的代码中的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}}
我不明白为什么这会成为一个问题。有人有任何意见吗?
答案 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)
}
}