콘솔에서 성공했음에도 불구하고 일부 인수를 사용하여 명령 호출이 작동하지만 다른 인수에서는 작동하지 않음
이 코드 조각은 / 명령을 사용하여 10개 프로세스의 세부 정보를 출력합니다. -n 10 및 -l 인수를 사용하는 usr/bin/top 2:
package main import ( "os/exec" ) func main() { print(top()) } func top() string { app := "/usr/bin/top" cmd := exec.Command(app, "-n 10", "-l 2") out, err := cmd.CombinedOutput() if err != nil { return err.Error() + " " + string(out) } value := string(out) return value }
그러나 -o CPU 인수를 추가합니다(예: cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")). 다음과 같은 오류가 발생합니다.
exit status 1 invalid argument -o: cpu /usr/bin/top usage: /usr/bin/top [-a | -d | -e | -c <mode>] [-F | -f] [-h] [-i <interval>] [-l <samples>] [-ncols <columns>] [-o <key>] [-O <secondaryKey>] [-R | -r] [-S] [-s <delay>] [-n <nprocs>] [-stats <key(s)>] [-pid <processid>] [-user <username>] [-U <username>] [-u]
흥미롭게도 top -o cpu -n 10 -l 2 명령은 다음에서 제대로 작동합니다. OS X 10.9.3의 콘솔.
이 문제는 Go 코드에서 인수가 분리되는 방식에서 발생합니다. 다음 줄:
cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")
은 쉘에서 top "-o cpu" "-n 10" "-l 2" 명령을 사용하는 것과 동일합니다. 대부분의 명령은 이 형식의 인수를 엄격하게 구문 분석합니다. 따라서 top은 -o CPU를 첫 번째 옵션으로 분리하고 나머지는 인수로 남겨 둡니다. 이는 숫자 인수에 대해서는 작동하지만 "cp"라는 필드를 찾을 때 실패하여 오류가 발생합니다.
이 문제를 해결하려면 다음과 같이 인수를 구분하세요.
cmd := exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
위 내용은 내 Go 코드가 콘솔에서 동일한 명령이 작동하는 동안 특정 인수를 사용하여 'top' 명령을 실행하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!