Rumah >pembangunan bahagian belakang >Golang >Mengapa My Go `exec.Command` Gagal dengan Argumen Tertentu, Sementara Perintah Yang Sama Berfungsi dalam Konsol?

Mengapa My Go `exec.Command` Gagal dengan Argumen Tertentu, Sementara Perintah Yang Sama Berfungsi dalam Konsol?

DDD
DDDasal
2024-12-24 00:59:10834semak imbas

Why Does My Go `exec.Command` Fail with Certain Arguments, While the Same Command Works in the Console?

Memanggil Perintah dengan Argumen: Menyelesaikan Masalah Ralat

Apabila cuba untuk melaksanakan perintah dengan argumen menggunakan fungsi exec.Command dalam Go, pembangun boleh menghadapi ketidakkonsistenan di mana hujah tertentu diterima manakala yang lain dipenuhi ralat.

Salah satu contoh sedemikian ialah kod berikut:

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
}

Kod ini berjaya mengeluarkan butiran 10 proses. Walau bagaimanapun, menambah hujah tambahan "-o cpu" (cth., cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")) menghasilkan ralat berikut:

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]

Ralat ini berlaku walaupun pada hakikatnya arahan "top -o cpu -n 10 -l 2" berfungsi dalam konsol.

Penyelesaian:

Kunci untuk menyelesaikan isu ini ialah memisahkan hujah. Dalam shell, arahan dan hujah biasanya dipisahkan oleh ruang. Walau bagaimanapun, apabila menggunakan exec.Command, setiap hujah mesti dihantar sebagai rentetan berasingan:

exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")

Dengan menghantar hujah dengan cara ini, atur cara mentafsir perintah dan hujahnya dengan betul. Ini menghalang ralat yang timbul apabila argumen digabungkan menjadi satu rentetan (cth., "-o cpu").

Atas ialah kandungan terperinci Mengapa My Go `exec.Command` Gagal dengan Argumen Tertentu, Sementara Perintah Yang Sama Berfungsi dalam Konsol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn