How to convert Os.File output into string instead of printing to shell. I am using github.com/kr/pty library to execute commands.
How can convert the output to sting instead of printing to console.
f belongs to Os.File in below example. How to convert it to string.
package main
import (
"github.com/kr/pty"
"io"
"os"
"os/exec"
)
func run_command(cmd string){
c := exec.Command("/bin/sh", "-c", cmd)
f, err := pty.Start(c)
if err != nil {
panic(err)
}
io.Copy(os.Stdout, f)
}
func main() {
run_command("ls -lrt");
}
答案 0 :(得分:1)
* os.File是io.Reader。有几种方法可以使用标准库将io.Reader的内容转换为字符串。
strings.Builder方法可能比其他方法性能更好,因为在将累积的字节转换为字符串时,strings.Builder不会分配内存。在问题的背景下,这种性能优势可能微不足道。
否则,方法的选择取决于口味和意见。
var buf strings.Builder
_, err := io.Copy(&buf, f)
if err != nil {
// handle error
}
s := buf.String()
var buf bytes.Buffer
_, err := buf.ReadFrom(f)
if err != nil {
// handle error
}
s := buf.String()
p, err := ioutil.Read(f)
if err != nil {
// handle error
}
s := string(p)
答案 1 :(得分:0)
代替
io.Copy(os.Stdout, f)
你可以做
var buf bytes.Buffer
io.Copy(&buf, f)
asString := string(buf.Bytes())