這個簡單的 python 腳本生成 stdout/stderr 消息,每秒兩條。#!/usr/bin/env python3import sys, timefor a in range(10): if(a%2==0): print(a, file=sys.stdout) else: print(a, file=sys.stderr) time.sleep(0.5)print("This is an STDOUT message")print("This is an STDERR message", file=sys.stderr)sys.exit(1)示例輸出:> ./runstatus.py 0 <- STDOUT, after 0.5s1 <- STDERR, after 0.5s2 <- STDOUT, after 0.5s3 ...456789This is an STDOUT message <- STDOUTThis is an STDERR message <- STDERR我需要用 golang 實時捕獲 stdout 和 stderr 輸出,所以我還發現了這個:package mainimport("bufio"; "fmt"; "os/exec";)func readerr(scanner *bufio.Scanner, channel string) { for scanner.Scan() { fmt.Println(channel, scanner.Text()); }}func main() { cmd:=exec.Command("./runstatus.py") stdout, _:=cmd.StdoutPipe() stderr, _:=cmd.StderrPipe() scanout:=bufio.NewScanner(stdout) scanerr:=bufio.NewScanner(stderr) scanout.Split(bufio.ScanLines) scanerr.Split(bufio.ScanLines) go readerr(scanout, "out:") go readerr(scanerr, "err:") cmd.Start() cmd.Wait()}但問題是這只適用于 STDERR?。?!Stderr 是實時的,但 stdout 不是,它在執行結束時突然顛簸:err: 1 <- STDERR, after 1serr: 3 <- STDERR, after 1serr: 5err: 7err: 9out: 0 <- STDOUT, after 5s, from here, the rest just flushes abruptly!out: 2out: 4out: 6out: 8out: This is an STDOUT messageerr: This is an STDERR message我究竟做錯了什么?
無法捕獲 cmd.Run() stdout,stderr 沒問題
慕碼人8056858
2023-03-07 11:43:26