Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Perintah Sistem dengan Selamat dengan Argumen Pembolehubah dalam Go?

Bagaimana untuk Melaksanakan Perintah Sistem dengan Selamat dengan Argumen Pembolehubah dalam Go?

DDD
DDDasal
2024-12-13 08:00:19321semak imbas

How to Safely Execute System Commands with Variable Arguments in Go?

Melaksanakan Perintah Sistem dengan Argumen Pembolehubah

Apabila melaksanakan perintah sistem yang melibatkan berbilang argumen, perintah itu perlu dipisahkan daripada argumen. Kod di bawah menggambarkan konsep ini:

import (
    "fmt"
    "os/exec"
    "strings"
    "sync"
)

func exeCmd(cmd string, wg *sync.WaitGroup) {
    fmt.Println("command is ", cmd)
    // Splitting head (e.g., "g++") from the rest of the command (e.g., "-c file.cpp")
    parts := strings.Fields(cmd)
    head := parts[0]
    parts = parts[1:len(parts)]

    out, err := exec.Command(head, parts...).Output()
    if err != nil {
        fmt.Printf("%s", err)
    }
    fmt.Printf("%s", out)
    wg.Done() // Signal to waitgroup that this goroutine is done
}

func main() {
    wg := new(sync.WaitGroup)
    wg.Add(3)

    x := []string{
        "echo newline >> foo.o",
        "echo newline >> f1.o",
        "echo newline >> f2.o"}

    go exeCmd(x[0], wg)
    go exeCmd(x[1], wg)
    go exeCmd(x[2], wg)

    wg.Wait()
}

Dalam kod ini:

  • exec.Command(kepala, bahagian...) memisahkan arahan daripada argumen menggunakan argumen variadic Go .
  • Pembolehubah kepala mengandungi arahan sistem (cth., "gema").
  • Bahagian-bahagian pembolehubah mengandungi argumen yang tinggal (cth., "baris baharu >> foo.o").
  • Fungsi strings.Fields(cmd) digunakan untuk membahagikan arahan kepada bahagian konstituennya.

Menggunakan pendekatan ini, atur cara boleh melaksanakan perintah sistem dengan bilangan argumen yang sewenang-wenangnya. Ia mengatasi had kod asal, yang gagal untuk arahan dengan berbilang perkataan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah Sistem dengan Selamat dengan Argumen Pembolehubah dalam 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