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 중국어 웹사이트의 기타 관련 기사를 참조하세요!