比方说,我想在走程序运行“LS”,并将结果存储在一个字符串。似乎有叉在exec和OS包处理的几个命令,但他们需要为标准输出文件参数等是否有办法让输出作为一个字符串?如何在Go中获得系统命令的输出?
19
A
回答
4
使用exec.Run。它会返回CMD,其中包含在标准输出(和标准错误)领域的os.File。然后你可以使用例如ioutil.ReadAll来阅读它。
例子:
package main
import (
"exec";
"io/ioutil";
)
func main() {
if cmd, e := exec.Run("/bin/ls", nil, nil, exec.DevNull, exec.Pipe, exec.MergeWithStdout); e == nil {
b, _ := ioutil.ReadAll(cmd.Stdout)
println("output: " + string(b))
}
}
2
1
两个选项,根据不同的模式,你喜欢:通过指定Pipe作为标准输出(和标准错误,如果你想)
70
现在有一个简单的方法:
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)
}
哪里out
是非标准输出。它在格式[]byte
,但你可以很容易与更改为字符串:
string(out)
您还可以使用CombinedOutput()
代替Output()
返回标准输出和标准错误。
+3
这应该很可能是现在接受的答案。接受的答案甚至不再编译。 – 2017-08-01 19:35:27
2
要获得这两个输出和错误到单独的字符串,你可以使用一个字节的缓冲区,像这样:
cmd := exec.Command("date")
var outb, errb bytes.Buffer
cmd.Stdout = &outb
cmd.Stderr = &errb
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Println("out:", outb.String(), "err:", errb.String())
相关问题
- 1. 从标准输出获取输出的系统命令C
- 2. 如何获得在命令窗口中出现的matlab输出
- 3. 如何在Perl中获得Win32 :: Process命令的输出?
- 4. 如何在Perl中获得外部命令的输出?
- 5. 如何在发生错误时获取系统命令的输出?
- 6. 如何在球拍中退出退出状态并输出系统命令?
- 7. 如何在Mac OS中实时获得顶级命令输出
- 8. 如何捕获系统的输出()
- 9. 如何在ruby脚本中输出系统(git log)命令内的文件名?
- 10. 如何让 '系统' 命令,在mysql的
- 11. 如何在生产模式下在Rails中记录系统命令输出?
- 12. 得到命令的输出
- 13. OS.system-将OS .system输出命令的输出添加到另一个os系统命令的命令
- 14. “less”命令如何获得stdin输入?
- 15. 在标准输出的背景下运行MATLAB系统命令
- 16. 如何使用gradle获得adb shell命令的输出?
- 17. 如何在Windows系统中获得剩余电池寿命?
- 18. 得到输出的命令在ObjC
- 19. 系统命令 - 没有得到返回
- 20. 如何从等待输入的命令中捕获命令输出?
- 21. 如何在捕获输出时执行打印颜色的系统命令,但也可以在Ruby中取消?
- 22. 如何使用Python获得Maven输出(或命令行日志)?
- 23. 如何获得命令行输出到Python
- 24. 如何获得shell命令输出到ansible变量文件
- 25. 在ncurses中捕获命令行输出
- 26. 如何捕获由unix系统抛出的错误消息给另一个系统,在这个系统中执行的命令将在UNIX系统上执行?
- 27. 输入命令与系统()和睡眠()
- 28. MATLAB系统命令
- 29. 系统命令bash
- 30. 将系统(char *命令)的输出加载到变量,C++
我不认为“exec”包存在了。我不得不使用下面Fatih列出的“os/exec”。 – 2015-08-18 04:25:51