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!