Memanggil Perintah dengan Argumen: Kejayaan Konsol, Kegagalan Terminal
Dalam senario ini, program Go berjaya melaksanakan perintah teratas dengan dua argumen ( -n 10 dan -l 2), memaparkan butiran 10 proses. Walau bagaimanapun, menambah argumen tambahan (-o cpu) menyebabkan ralat: "argumen tidak sah -o".
Masalahnya
Ralat berlaku apabila cuba melaksanakan arahan atas dari terminal dengan senarai hujah penuh (-o cpu -n 10 -l 2). Walau bagaimanapun, arahan yang sama berfungsi seperti yang dijangkakan apabila dilaksanakan daripada konsol.
Punca Punca
Isu ini berpunca daripada cara hujah dihuraikan oleh sistem pengendalian. Biasanya, apabila arahan dilaksanakan daripada konsol, setiap hujah dipisahkan oleh ruang. Walau bagaimanapun, dalam program Go, hujah dihantar sebagai rentetan tunggal. Ini meninggalkan sistem pengendalian untuk mentafsir hujah, yang ia lakukan secara salah dalam kes ini.
Penyelesaian
Untuk menyelesaikan isu, hujah mesti diluluskan sebagai berasingan rentetan kepada fungsi exec.Command. Kod berikut menunjukkan cara yang betul untuk melakukan ini:
import ( "os/exec" ) func main() { app := "/usr/bin/top" cmd := exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2") out, err := cmd.CombinedOutput() // Error handling omitted for brevity value := string(out) return value }
Dengan menghantar setiap hujah sebagai rentetan berasingan, sistem pengendalian boleh mentafsir arahan dengan betul dan melaksanakannya seperti yang dimaksudkan. Ini menyelesaikan ralat dan membolehkan program berjaya memaparkan butiran 10 proses dengan argumen tambahan (-o cpu).
Atas ialah kandungan terperinci Mengapa `exec.Command` Program My Go Gagal di Terminal Tetapi Berjaya dalam Konsol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!