Rumah >pembangunan bahagian belakang >Golang >Mengapa `exec.Command` Program My Go Gagal di Terminal Tetapi Berjaya dalam Konsol?

Mengapa `exec.Command` Program My Go Gagal di Terminal Tetapi Berjaya dalam Konsol?

Patricia Arquette
Patricia Arquetteasal
2024-12-22 01:52:10140semak imbas

Why Does My Go Program's `exec.Command` Fail in the Terminal But Succeed in the Console?

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!

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