【问题标题】:How to print output of an interactive child process from parent process?如何从父进程打印交互式子进程的输出?
【发布时间】: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


【解决方案1】:

运行exec.Command("python", "-i")

默认情况下,在不在 shell 中运行 python 时,它不会进入交互模式,也不会打印任何内容。

【讨论】:

    猜你喜欢
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多