gpt4 book ai didi

go - golang exec.Command 程序的奇怪行为

转载 作者:IT王子 更新时间:2023-10-29 02:29:55 25 4
gpt4 key购买 nike

我有这样的代码:

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)
}
}

它有效,但为什么呢?它只是调用方法,为什么第一个版本不起作用?

最佳答案

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

$ echo -n hello | wc -l
0

关于go - golang exec.Command 程序的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com