So far I've seen a few different ways whereby you can easily execute a shell command in go and yield it's output. However, there are a ton of commands that output while the program is still running, for example, git clone ...
If git clone http://some.repo.git
is executed using something like:
out, err := exec.Command("...").Output()
There doesn't seem to be any output as it's running obviously. Or at least in my experiance that seems to be the case. Is there a simple way or pattern that can be implemented to show the live output of the command that is being ran?
You can get a pipe connected to the command's stdout
:
cmd := exec.Command("...")
pipe, err := cmd.StdoutPipe()
Then start the command:
err := cmd.Start()
and read its output (periodically ever so often):
b := make([]byte, 1024, 1024)
n, err := pipe.Read(b)
// b contains up to 1024 characters of cmd's output
in the end, and with a drained pipe (no output left in the pipe), call Wait
to wait for the command to exit:
err := cmd.Wait()