为了账号安全,请及时绑定邮箱和手机立即绑定

golang exec.Command 程序的奇怪行为

golang exec.Command 程序的奇怪行为

Go
POPMUISE 2021-11-22 18:16:18
我有这样的代码:func main() {        s := "foobar"        cmd := exec.Command("wc", "-l")        stdin, err := cmd.StdinPipe()        if err != nil {                log.Panic(err)        }        stdout, err := cmd.StdoutPipe()        if err != nil {                log.Panic(err)        }        err = cmd.Start()        if err != nil {                log.Panic(err)        }        io.Copy(stdin, bytes.NewBufferString(s))        stdin.Close()        io.Copy(os.Stdout, stdout)        err = cmd.Wait()        if err != nil {                log.Panic(err)        }}它的输出是:0但是当我会做简单的修改时:func main() {        runWcFromStdinWorks("aaa\n")        runWcFromStdinWorks("bbb\n")}func runWcFromStdinWorks(s string) {        cmd := exec.Command("wc", "-l")        stdin, err := cmd.StdinPipe()        if err != nil {                log.Panic(err)        }        stdout, err := cmd.StdoutPipe()        if err != nil {                log.Panic(err)        }        err = cmd.Start()        if err != nil {                log.Panic(err)        }        io.Copy(stdin, bytes.NewBufferString(s))        stdin.Close()        io.Copy(os.Stdout, stdout)        err = cmd.Wait()        if err != nil {                log.Panic(err)        }}它有效,但为什么呢?它只是调用方法为什么第一个版本不起作用?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

s一个示例中的字符串没有换行,这会导致wc -l返回 0。您可以通过执行以下操作来查看此行为:

$ echo -n hello | wc -l
0


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信