这个简单的 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我究竟做错了什么?
1 回答
米脂
TA贡献1836条经验 获得超3个赞
问题可能是在 Python 中,print
标准输出的输出被缓冲了。解决方案可能取决于 Python 版本。
例如,使用 -u 选项运行脚本
python -u ./runstatus.py
从 Python 3.3 开始,该print
函数有一个flash
参数,您可以尝试使用它:
print(a, file=sys.stdout, flush=True)
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报
0/150
提交
取消