2 回答
TA贡献2037条经验 获得超6个赞
解决方案
实际上,这很容易。您可以将命令的标准输出设置为os.StdoutBob 是您的叔叔:
package main
import (
"os"
"os/exec"
)
func main() {
cmd := exec.Command("pwd")
cmd.Stdout = os.Stdout
err := cmd.Run()
if err != nil {
panic(err)
}
}
这里发生了什么事?
默认情况下,命令的输出存储在bytes.Buffer ifcmd.Stdout未设置为 another 中io.Writer。然后调用cmd.Output()运行命令并将输出保存到所述缓冲区。
由于os.Stdout实现了io.Writer接口,我们简单地设置cmd.Stdout为os.Stdout. 现在当.Run()被调用时,命令的输出被写入io.Writer定义的 in cmd.Stdout,这恰好是os.Stdout并且输出被写入shell。
编辑:根据评论,如果所有命令都应该写入os.Stdout,当然没有办法阻止某些帮助程序。我会这样做:
package main
import (
"os"
"os/exec"
)
func CmdToStdout( c string ) (err error){
cmd := exec.Command(c)
cmd.Stdout = os.Stdout
err = cmd.Run()
return
}
func main() {
err := CmdToStdout("pwd")
if err != nil {
panic(err)
}
}
TA贡献1995条经验 获得超2个赞
如果你经常需要这个,你必须创建一个助手(5 行看起来太多了)。根据文档,这是推荐的方法:
package main
import (
"fmt"
"log"
"os/exec"
)
func main() {
out, err := exec.Command("date").Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf("The date is %s\n", out)
}
- 2 回答
- 0 关注
- 201 浏览
添加回答
举报