【发布时间】:2012-02-11 02:25:02
【问题描述】:
我正在用 Go 编写一个程序,它执行类似服务器的程序(也是 Go)。现在我想在我启动父程序的终端窗口中拥有子程序的标准输出。一种方法是使用cmd.Output() 函数,但这仅在进程退出后打印标准输出。 (这是一个问题,因为这个类似服务器的程序运行了很长时间,我想读取日志输出)
变量out 属于type io.ReadCloser,我不知道应该用它做什么来完成我的任务,而且我在网上找不到关于这个主题的任何有用信息。
func main() {
cmd := exec.Command("/path/to/my/child/program")
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
//fmt.Println(out)
cmd.Wait()
}
代码说明:取消注释Println函数以获得要编译的代码,我知道Println(out io.ReadCloser)不是一个有意义的函数。
(它产生输出 &{3 |0 <nil> 0} )这两行只是让代码编译所必需的。
【问题讨论】:
-
导入语句的“exec”行应该是“os/exec”。
-
感谢您的信息,实际上它只是 exec pre go1,现在它在 os 中。为 go1 更新了它
-
我认为您实际上不需要在 go 例程中调用
io.Copy -
我认为您不需要调用
cmd.Wait()或for{}循环......为什么这些在这里? -
@weberc2 看不起 elimisteve 的回答。如果您只想运行程序一次,则不需要 for 循环。但是如果你不调用 cmd.Wait(),你的 main() 可能会在你调用的程序完成之前结束,并且你不会得到你想要的输出
标签: go stdout command-line-interface