这个简单的 python 脚本生成 stdout/stderr 消息,每秒两条。
#!/usr/bin/env python3
import sys, time
for 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.5s
1 <- STDERR, after 0.5s
2 <- STDOUT, after 0.5s
3 ...
4
5
6
7
8
9
This is an STDOUT message <- STDOUT
This is an STDERR message <- STDERR
我需要用 golang 实时捕获 stdout 和 stderr 输出,所以我还发现了这个:
package main
import("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 1s
err: 3 <- STDERR, after 1s
err: 5
err: 7
err: 9
out: 0 <- STDOUT, after 5s, from here, the rest just flushes abruptly!
out: 2
out: 4
out: 6
out: 8
out: This is an STDOUT message
err: This is an STDERR message
我究竟做错了什么?
米脂
相关分类