第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang寫大文件的疑問

golang寫大文件的疑問

陪伴而非守候 2019-04-08 11:17:20
寫了個小程序,批量ssh遠(yuǎn)端服務(wù)器操作,并且將結(jié)果保存到本地.現(xiàn)在使用的方法:使用exec.Command執(zhí)行命令,獲取cmd.Stdout,并且結(jié)果outf.WriteString到文件.如果場景變成是grep一個比較大的日志,有比較大的標(biāo)準(zhǔn)輸出,這個時候是全部都讀取到內(nèi)存再一次性寫到文件中么?是否有辦法可以進(jìn)行優(yōu)化?謝謝.
查看完整描述

2 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個贊

多謝huandu和felix,使用os/exec就可以處理所有的內(nèi)容了.
Packageexecrunsexternalcommands.Itwrapsos.StartProcesstomakeiteasiertoremapstdinandstdout,connectI/Owithpipes,anddootheradjustments.
packagemain
import(
"fmt"
"io"
"log"
"os"
"os/exec"
)
funccheckError(errerror){
iferr!=nil{
log.Fatalf("Error:%s",err)
}
}
funcmain(){
//Replace`ls`(anditsarguments)withsomethingmoreinteresting
cmd:=exec.Command("ssh","1.1.1.1","find/")
//Createstdout,stderrstreamsoftypeio.Reader
stdout,err:=cmd.StdoutPipe()
checkError(err)
stderr,err:=cmd.StderrPipe()
checkError(err)
//Startcommand
err=cmd.Start()
checkError(err)
//Don'tletmain()exitbeforeourcommandhasfinishedrunning
defercmd.Wait()//Doesn'tblock
//Non-blockinglyechocommandoutputtoterminal
goio.Copy(os.Stdout,stdout)
goio.Copy(os.Stderr,stderr)
//IloveGo'strivialconcurrency:-D
fmt.Printf("Dootherstuffhere!Noneedtowait.\n\n")
}
                            
查看完整回答
反對 回復(fù) 2019-04-08
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個贊

解決此類問題最好在遠(yuǎn)端做事情,盡可能的讓遠(yuǎn)端直接處理輸入,將處理過且精簡了的輸出通過ssh傳回來。
在遠(yuǎn)端,為了盡量不在內(nèi)存中載入全部文件,也應(yīng)該盡量使用管道的方式逐行處理,或者直接打開文件句柄進(jìn)行操作。
如果不方便在遠(yuǎn)端裝可執(zhí)行代碼,可以考慮每次在先將處理程序通過ssh傳過去。
P.S.如果僅僅是想做類似grep這種逐行處理的操作,那么直接讀stdout也未嘗不可,立即讀立即處理,這樣并不會造成太多的內(nèi)存消耗。
此外,exec.Command不知道內(nèi)部實(shí)現(xiàn)如何,很可能會一次讀取所有內(nèi)容到內(nèi)存。一個穩(wěn)妥的做法是使用os.StartProcess來執(zhí)行ssh,它的最后一個參數(shù)可以用來重定向命令的stdout,詳見文檔。
                            
查看完整回答
反對 回復(fù) 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 812 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號