本文整理匯總了Golang中exec.Cmd.StdoutPipe方法的典型用法代碼示例。如果您正苦於以下問題:Golang Cmd.StdoutPipe方法的具體用法?Golang Cmd.StdoutPipe怎麽用?Golang Cmd.StdoutPipe使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類exec.Cmd
的用法示例。
在下文中一共展示了Cmd.StdoutPipe方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: ProcessRequest
func ProcessRequest(request DownloadRequest) {
var tempFile string = MakeTempFileName(request.url, ".flv")
var tempFileSansExtension string
{
pathDotIndex := strings.LastIndex(tempFile, ".")
tempFileSansExtension = tempFile[0:pathDotIndex]
}
var cmd *exec.Cmd = MakeCommand(&request, tempFile)
if cmd == nil {
request.WriteError("forming the download command", nil)
return
}
var proc *StdoutProcessor
if pipe, e := cmd.StdoutPipe(); e != nil {
request.WriteError("setting youtube-dl pipe", e)
return
} else {
proc = NewStdoutProcessor(&pipe)
}
if e := cmd.Start(); e != nil {
request.WriteError("running youtube-dl", e)
return
}
var state DownloadState = kStarting
var data map[string]interface{}
var e os.Error
for {
status, e := proc.ParseOneStatusMessage()
if e != nil {
if state < kExtractingAudio {
request.WriteError("downloading the video", e)
return
} else {
break
}
} else if status == nil {
continue
}
if status.state != kDownloadingVideo && (status.state == 0 || status.state == state) {
continue
}
fmt.Printf("Proc SM: %v\n", status)
if status.state >= kDownloadingVideo && state != status.state {
if data, e = ReadJson(tempFile + ".info.json"); e != nil {
request.WriteError("reading video JSON", e)
return
}
status.title = data["title"].(string)
}
state = status.state
status.requestId = request.id
request.statusChannel <- *status
}
var finalFileBaseName = data["title"].(string) + "." + *outputFormat
var finalFile = request.basePath + "/" + finalFileBaseName
if _, e := CopyFile(finalFile,
tempFileSansExtension+"."+*outputFormat); e != nil {
request.WriteError("tagging", e)
return
}
request.statusChannel <- StatusMessage{request.id, kTagging, "", "", 0, 0, 0, nil, ""}
var c = exec.Command("lltag", "--yes", "-G", "--rename=%a/%t", finalFileBaseName)
c.Dir = request.basePath
out, ioError := c.StdoutPipe()
if ioError != nil {
request.WriteError("starting the tagger", ioError)
return
}
var in io.WriteCloser
in, ioError = c.StdinPipe()
if ioError != nil {
request.WriteError("starting the tagger", ioError)
return
}
var link string
if e = c.Start(); e != nil {
request.WriteError("tagging", e)
return
} else {
in.Write([]byte(strings.Repeat("y\n", 20)))
outData, e := ioutil.ReadAll(out)
if e != nil {
request.WriteError("reading the tagger output", e)
return
}
match := regexp.MustCompile("New filename is '([^\n]*)'\n").FindStringSubmatch(string(outData))
fmt.Printf("out data: %s\n\nmatch: %v\n", string(outData), match)
//.........這裏部分代碼省略.........