【发布时间】:2019-09-22 15:06:45
【问题描述】:
我正在尝试从父进程获取交互式子进程(如 python)的输出。我尝试使用以下代码将进程 stdin 更改为 os.Stdin 并将 stdout 更改为 os.Stdout 但它不起作用。我在父终端上看不到子进程的输出。我错过了什么或做错了吗?
func main(){
cmd := exec.Command("python")
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil{
fmt.Println("Cannot Execute cmd.")
}
}
【问题讨论】:
-
尝试 python -u 或设置 PYTHONUNBUFFERED 环境变量来禁用输出缓冲。我认为分配 os.Stdin 应该足以让 python 看到它已连接到 TTY,但还是试试吧。
-
设置 PYTHONUNBUFFERED 并没有解决问题。我希望输出是实时的。 os.Stdout 仅在终止子进程后打印结果。
标签: go