Apabila menggunakan pakej os/exec untuk melaksanakan arahan, seseorang mungkin menghadapi kebimbangan umum untuk mendapatkan kod keluar. Walaupun dokumentasi menyediakan kaedah Process.Success() untuk menunjukkan sama ada proses itu keluar tanpa ralat, ia tidak menyediakan cara yang jelas untuk mendapatkan semula kod keluar sebenar.
Satu penyelesaian untuk memperoleh kod keluar untuk Linux- sistem berasaskan adalah untuk memanfaatkan pakej syscall. Berikut ialah coretan kod yang dipertingkatkan:
package main import ( "log" "os/exec" "syscall" ) func main() { cmd := exec.Command("somecommand", "parameter") if err := cmd.Run(); err != nil { if exiterr, ok := err.(*exec.ExitError); ok { // exiterr.Sys() is a syscall.WaitStatus. log.Printf("Exit Status: %d", exiterr.Sys().(syscall.WaitStatus).ExitStatus()) } else { log.Fatalf("cmd.Run: %v", err) } } }
Pendekatan ini menggunakan jenis WaitStatus daripada pakej syscall, yang mengandungi kaedah ExitStatus() untuk mendapatkan semula kod keluar untuk proses yang dijalankan pada Linux dan sistem pengendalian seperti UNIX yang lain .
Untuk sistem Windows, kaedah ini tidak akan berfungsi kerana ia tidak memberikan konsep kod keluar yang sama. Sebaliknya, anda boleh memilih pendekatan alternatif seperti menggunakan pilihan /c cmd.exe untuk melaksanakan arahan dan menghuraikan output untuk kod ralat.
Dengan menyesuaikan teknik ini berdasarkan sistem pengendalian anda, anda boleh mendapatkan semula dengan berkesan kod keluar bagi arahan luaran yang dilaksanakan melalui pakej os/exec dalam Go.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kod Keluar daripada `os/exec` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!