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
Lepaskan: 2024-12-22 07:16:26
asal
954 orang telah melayarinya

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
}
Salin selepas log masuk

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]
Salin selepas log masuk

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")
Salin selepas log masuk

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")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan