登录
首页 >  Golang >  Go问答

golang写大文件的疑问

来源:SegmentFault

时间:2023-01-25 07:41:59 397浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《golang写大文件的疑问》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

写了个小程序,批量ssh远端服务器操作,并且将结果保存到本地.

现在使用的方法:

使用exec.Command 执行命令,获取cmd.Stdout ,并且结果outf.WriteString到文件.

如果场景变成是grep 一个比较大的日志,有比较大的标准输出,这个时候是全部都读取到内存再一次性写到文件中么? 是否有办法可以进行优化?谢谢.

正确答案

多谢huan du 和felix ,使用os/exec就可以处理所有的内容了.

Package exec runs external commands. It wraps os.StartProcess to make it easier to remap stdin and stdout, connect I/O with pipes, and do other adjustments.

package main

import (
        "fmt"
        "io"
        "log"
        "os"
        "os/exec"
       )

func checkError(err error) {
    if err != nil {
        log.Fatalf("Error: %s", err)
    }
}

func main() {
    // Replace `ls` (and its arguments) with something more interesting
cmd := exec.Command("ssh", "1.1.1.1","find /")

         // Create stdout, stderr streams of type io.Reader
         stdout, err := cmd.StdoutPipe()
         checkError(err)
         stderr, err := cmd.StderrPipe()
         checkError(err)

         // Start command
         err = cmd.Start()
         checkError(err)

         // Don't let main() exit before our command has finished running
         defer cmd.Wait()  // Doesn't block

         // Non-blockingly echo command output to terminal
         go io.Copy(os.Stdout, stdout)
         go io.Copy(os.Stderr, stderr)

         // I love Go's trivial concurrency :-D
         fmt.Printf("Do other stuff here! No need to wait.\n\n")
}

今天关于《golang写大文件的疑问》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>