Tôi đang viết một chương trình trong Go thực hiện một máy chủ như chương trình (cũng Go). Bây giờ tôi muốn có stdout của chương trình con trong cửa sổ terminal của tôi, nơi tôi bắt đầu chương trình cha mẹ. Một cách để làm điều này là với hàm cmd.Output()
, nhưng điều này chỉ in ra giá trị sau khi quá trình đã thoát. (Đó là vấn đề vì chương trình giống như máy chủ này chạy trong một thời gian dài và tôi muốn đọc đầu ra nhật ký)Chuyển hướng đường ống dẫn xuất của quy trình con trong Go
Biến số out
là type io.ReadCloser
và tôi không biết mình nên làm gì với nó để đạt được nhiệm vụ của mình và tôi không thể tìm thấy bất kỳ thứ gì hữu ích trên web về chủ đề này.
func main() {
cmd := exec.Command("/path/to/my/child/program")
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
//fmt.Println(out)
cmd.Wait()
}
Giải thích vào mã: bỏ ghi chú các Println
chức năng để lấy mã để biên dịch, tôi biết rằng Println(out io.ReadCloser)
không phải là một chức năng có ý nghĩa.
(nó tạo ra đầu ra &{3 |0 <nil> 0}
) Hai dòng này chỉ là bắt buộc để lấy mã để biên dịch.
Dòng "exec" của câu lệnh nhập phải là "os/exec". – evilspacepirate
cảm ơn cho thông tin, thực sự nó đã được chỉ exec trước go1, bây giờ của nó trong os. cập nhật nó cho go1 – mbert
Tôi không nghĩ rằng bạn thực sự cần phải gọi 'io.Copy' trong thói quen đi – rmonjo