> 백엔드 개발 > Golang > 내 Go 코드가 콘솔에서 동일한 명령이 작동하는 동안 특정 인수를 사용하여 'top' 명령을 실행하지 못하는 이유는 무엇입니까?

내 Go 코드가 콘솔에서 동일한 명령이 작동하는 동안 특정 인수를 사용하여 'top' 명령을 실행하지 못하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-22 07:16:26
원래의
909명이 탐색했습니다.

Why Does My Go Code Fail to Execute the `top` Command with Certain Arguments While the Same Command Works from the Console?

콘솔에서 성공했음에도 불구하고 일부 인수를 사용하여 명령 호출이 작동하지만 다른 인수에서는 작동하지 않음

이 코드 조각은 / 명령을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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