Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Dapatkan Kod Keluar dengan Amanah daripada Pakej os/exec Go?

Bagaimanakah Saya Boleh Dapatkan Kod Keluar dengan Amanah daripada Pakej os/exec Go?

Barbara Streisand
Barbara Streisandasal
2024-12-31 01:37:08822semak imbas

How Can I Reliably Retrieve Exit Codes from Go's os/exec Package?

Menentukan Kod Keluar dalam Pakej os/exec Go

Dalam Go, pakej os/exec menyediakan mekanisme yang mudah untuk melaksanakan arahan sistem. Walau bagaimanapun, mendapatkan kod keluar perintah yang dilaksanakan boleh menjadi agak rumit.

Masalahnya

Kaedah Command.Run() dan Command.Output() lakukan tidak memberikan akses terus kepada kod keluar. Walaupun Command.Wait() akan mengembalikan ralat untuk kod keluar bukan sifar, ralat ini tidak termasuk nilai kod keluar tertentu.

Penyelesaian Merentas Platform

Malangnya, tiada API platform-agnostik untuk mendapatkan semula kod keluar. Walau bagaimanapun, untuk sistem Linux, pendekatan berikut boleh digunakan:

import (
    "syscall"
)

...

// Attempt to execute the command
if err := cmd.Start(); err != nil {
    log.Fatalf("cmd.Start: %v", err)
}

// Wait for the command to complete
if err := cmd.Wait(); err != nil {
    if exitErr, ok := err.(*exec.ExitError); ok {
        // Convert exit status to an integer
        exitStatus := exitErr.ExitCode()
        log.Printf("Exit Status: %d", exitStatus)
    } else {
        log.Fatalf("cmd.Wait: %v", err)
    }
}

Dalam penyelesaian ini, kami bergantung pada struktur ExitError bukan standard yang tersedia dalam pakej os/exec. Dengan menyemak kehadirannya, kami boleh mengakses kaedah ExitCode() untuk mendapatkan semula kod keluar.

Limitation

Sila ambil perhatian bahawa pendekatan ini khusus untuk Linux dan mungkin tidak berfungsi pada platform lain. Rujuk dokumentasi pakej os/exec untuk kaedah alternatif atau rujuk sumber khusus platform.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Kod Keluar dengan Amanah daripada Pakej os/exec Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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