Masalah:
Apabila melaksanakan proses menggunakan exec.Command, bagaimana boleh anda mengubah hala outputnya ke log masuk anda masa nyata?
Konteks:
Pendekatan konvensional menunggu proses selesai dan kemudian mengelog keluaran gabungannya tidak sesuai untuk proses yang berjalan lama atau belum selesai . Menulis kepada stdout dalam masa nyata juga tidak berguna untuk perkhidmatan yang tidak menggunakan terminal.
Penyelesaian:
Untuk menangkap dan mencatatkan output proses dalam masa nyata , anda boleh menggunakan paip:
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } // Start the command after setting up the pipe if err := cmd.Start(); err != nil { return 0, err } // Read the command's stdout line by line in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // Log each line } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
Pendekatan ini membolehkan anda menangkap kedua-dua stdout dan stderr dengan menggunakan goroutine.
Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Output Perintah Exec ke Log Masuk Masa Nyata Anda di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!