Rumah >pembangunan bahagian belakang >Golang >Mengapa Kod My Go Gagal Melaksanakan Perintah `top` dengan Argumen Tertentu Walaupun Perintah Yang Sama Berfungsi daripada Konsol?

Mengapa Kod My Go Gagal Melaksanakan Perintah `top` dengan Argumen Tertentu Walaupun Perintah Yang Sama Berfungsi daripada Konsol?

Susan Sarandon
Susan Sarandonasal
2024-12-22 07:16:26958semak imbas

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

Memanggil Perintah dengan Beberapa Argumen Berfungsi tetapi Tidak dengan Yang Lain Walaupun Berjaya daripada Konsol

Coretan kod ini mengeluarkan butiran 10 proses menggunakan arahan / usr/bin/top dengan hujah -n 10 dan -l 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
}

Walau bagaimanapun, menambah argumen cpu -o (cth., cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")) mengakibatkan ralat:

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]

Menariknya, arahan top -o cpu -n 10 -l 2 berfungsi dengan baik daripada konsol dalam OS X 10.9.3.

Isu timbul daripada cara hujah dipisahkan dalam kod Go. Baris berikut:

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

sama dengan menggunakan arahan atas "-o cpu" "-n 10" "-l 2" dalam shell. Kebanyakan arahan menghuraikan hujah dalam format ini dengan ketat. Oleh itu, bahagian atas memisahkan cpu -o sebagai pilihan pertama, meninggalkan yang lain sebagai hujahnya. Ini berfungsi untuk argumen berangka tetapi gagal apabila mencari medan bernama " cpu", menyebabkan ralat.

Untuk menyelesaikan masalah ini, pisahkan argumen seperti berikut:

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

Atas ialah kandungan terperinci Mengapa Kod My Go Gagal Melaksanakan Perintah `top` dengan Argumen Tertentu Walaupun Perintah Yang Sama Berfungsi daripada 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