Rumah >pembangunan bahagian belakang >Golang >Mengapa My Go `exec.Command` Gagal dengan Argumen Tertentu, Sementara Perintah Yang Sama Berfungsi dalam Konsol?
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!