Apabila melaksanakan arahan menggunakan fungsi exec.Command, selalunya wajar untuk mengubah hala keluaran ke log secara nyata- pemantauan masa. Walaupun CombinedOutput boleh menangkap keseluruhan output sebaik sahaja arahan selesai, ia tidak sesuai untuk proses yang berjalan lama atau belum selesai.
Penyelesaian biasa untuk pengalihan keluaran masa nyata adalah dengan menetapkan secara terus stdout dan stderr kepada aliran keluaran sistem (os.Stdout dan os.Stderr). Walau bagaimanapun, ini mungkin tidak praktikal untuk aplikasi yang tidak menulis ke terminal.
Penyelesaian Menggunakan Paip
Untuk mengubah hala output arahan ke log, anda boleh menggunakan paip . Berikut ialah contoh:
stdout, err := cmd.StdoutPipe() if err != nil { return nil, err } // Start the command with the pipe in place if err := cmd.Start(); err != nil { return nil, err } // Real-time monitoring of stdout in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // Write line to log or perform other operations } if err := in.Err(); err != nil { log.Printf("Error: %s", err) }
Pertimbangan
Kaedah ini mengendalikan stdout, tetapi anda juga boleh mengurus stderr dengan mencipta paip dan goroutine yang berasingan. Selain itu, anda mungkin perlu mengendalikan pembatalan konteks atau kes kelebihan lain untuk memastikan pembersihan dan pengurusan sumber yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Output Perintah ke Log Masuk Masa Nyata di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!