我正在用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}
)只需两行即可编译代码。
1
import语句的“ exec”行应为“ os / exec”。
—
evilspacepirate,
感谢您提供的信息,实际上它只是exec pre go1,现在在OS中。已将其更新为go1
—
mbert
我认为您实际上不需要
—
rmonjo
io.Copy
在go例程中调用
我认为您不需要调用
—
weberc2 2014年
cmd.Wait()
或for{}
循环...为什么在这里?
@ weberc2可以忽略elimisteve的答案。如果只想运行一次程序,则不需要for循环。但是,如果您不调用cmd.Wait(),则main()可能会在您调用的程序完成之前结束,并且您不会得到想要的输出
—
mbert