package main import ( "bufio" "log" "os/exec" ) func Download(event PBEvent) (err error) { cmd := exec.Command("yt-dlp", "-v", "-o", "C:/Users/Administrator/ytdlpVideos/%(title)s.%(ext)s", "-f", "bestvideo[ext=mp4]+bestaudio[ext=m4a]", event.Record.Link) // Get the pipes for stdout and stderr stdout, err := cmd.StdoutPipe() if err != nil { log.Printf("Error creating StdoutPipe: %++v for cmd %++v", err, cmd) return err } stderr, err := cmd.StderrPipe() if err != nil { log.Printf("Error creating StderrPipe: %++v for cmd %++v", err, cmd) return err } err = cmd.Start() if err != nil { log.Printf("Error starting command: %++v with error %++v", cmd, err) return err } stdoutScanner := bufio.NewScanner(stdout) go func() { for stdoutScanner.Scan() { log.Printf("%s: %s", event.Record.Id, stdoutScanner.Text()) } }() stderrScanner := bufio.NewScanner(stderr) go func() { for stderrScanner.Scan() { log.Printf("%s: %s", event.Record.Id, stderrScanner.Text()) } }() err = cmd.Wait() if err != nil { exitError, ok := err.(*exec.ExitError) if ok { exitCode := exitError.ExitCode() log.Printf("Command exited with code %d\n", exitCode) } else { log.Printf("Error running yt-dlp: %++v; %++v", cmd, err) return err } } log.Printf("Downloaded %s (%s)", event.Record.Id, event.Record.Link) SetDownloaded(event) return nil }