> 백엔드 개발 > Golang > exec.Command를 사용할 때 내 Go 코드가 '종료 상태 1'을 반환하는 이유는 무엇입니까?

exec.Command를 사용할 때 내 Go 코드가 '종료 상태 1'을 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-24 04:24:15
원래의
953명이 탐색했습니다.

Why Does My Go Code Return

Go의 exec.Command에서 "exit status 1" 오류 디버깅

외부 명령을 실행하는 동안 수수께끼의 "exit status 1" 오류가 발생하는 경우 Golang의 exec.Command를 사용하면 정확한 원인을 찾아내는 것이 어려운 작업이 될 수 있습니다. 이 간략한 가이드는 오류를 효과적으로 해결하는 방법에 대한 통찰력을 제공합니다.

향상된 오류 메시지를 위해 Stderr 사용

기본적으로 exec.Command는 다음과 같은 경우 표준 출력(stdout)만 캡처합니다. 명령을 실행 중입니다. 더 자세한 오류 메시지를 검색하려면 exec.Command 구조체의 Stderr 속성을 활용할 수 있습니다. 방법은 다음과 같습니다.

cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
로그인 후 복사

이제 명령이 실행되고 오류가 발생하면 일반 "종료 상태 1" 대신 오류 메시지가 stderr 버퍼에 기록됩니다.

다음 코드를 생각해 보세요. snippet:

cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    return
}
fmt.Println("Result: " + out.String())
로그인 후 복사

실행 시 코드는 다음과 같은 자세한 오류 메시지를 표시합니다:

exit status 1: find: -exec: no terminating ";" or "+"
로그인 후 복사

추가 고려 사항

주목할 가치가 있습니다 일부 명령은 stderr에 오류를 기록하는 규칙을 따르지 않을 수 있습니다. 일부 명령은 stdout에 오류를 인쇄할 수 있는 반면, 다른 명령은 stderr에 오류를 인쇄하지만 여전히 성공적인 종료 상태(0)를 반환할 수 있습니다. 따라서 실행 중인 특정 명령에 맞게 코드를 조정해야 할 수도 있습니다.

위 내용은 exec.Command를 사용할 때 내 Go 코드가 '종료 상태 1'을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿