Skip to content

os/exec: No stderr is shown in the os/exec error #44270

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
finn-ball opened this issue Feb 15, 2021 · 1 comment
Closed

os/exec: No stderr is shown in the os/exec error #44270

finn-ball opened this issue Feb 15, 2021 · 1 comment
Labels
FrozenDueToAge NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.

Comments

@finn-ball
Copy link

What version of Go are you using (go version)?

go version go1.15.7 linux/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/finn/.cache/go-build"
GOENV="/home/finn/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/finn/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/finn/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build623746363=/tmp/go-build -gno-record-gcc-switches"

What did you do?

This doesn't run on the playground. Run this, for example, in a non-git directory.

The docs imply we should be able to see at least some of the stderr:
https://golang.org/src/os/exec/exec.go?s=6278:6323#L461

package main

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

func main() {
	if err := execute(); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}

// Simple git execution.
func execute() error {
	cmd := exec.Command("git", "status")

	if err := cmd.Start(); err != nil {
		return err
	}

	if err := cmd.Wait(); err != nil {
		if e, ok := err.(*exec.ExitError); ok {
			fmt.Println(e)
			fmt.Println(string(e.Stderr))
		}
		return err
	}

	return nil
}

What did you expect to see?

The stderr.

What did you see instead?

Nothing.

@seankhliao seankhliao changed the title No stderr is shown in the os/exec error message. os/exec: No stderr is shown in the os/exec error Feb 15, 2021
@seankhliao seankhliao added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Feb 15, 2021
@seankhliao
Copy link
Member

The doc for os/exec.ExitError.Stderr says (emphasis added):

// Stderr holds a subset of the standard error output from the
// Cmd.Output method if standard error was not otherwise being
// collected.

No other methods are documented to store Stderr

Closing as working as intended

@golang golang locked and limited conversation to collaborators Feb 15, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

3 participants