Go lang convert os.File output to String

时间:2018-02-03 10:28:29

标签: go

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

2 个答案:

答案 0 :(得分:1)

* os.File是io.Reader。有几种方法可以使用标准库将io.Reader的内容转换为字符串。

strings.Builder方法可能比其他方法性能更好,因为在将累积的字节转换为字符串时,strings.Builder不会分配内存。在问题的背景下,这种性能优势可能微不足道。

否则,方法的选择取决于口味和意见。

strings.Builder

var buf strings.Builder
_, err := io.Copy(&buf, f)
if err != nil {
    // handle error
}
s := buf.String()

bytes.Buffer

var buf bytes.Buffer
_, err := buf.ReadFrom(f)
if err != nil {
    // handle error
}
s := buf.String()

ioutil.ReadAll

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