在golang的读取端关闭了连接到管道的检测标准输出

时间:2018-06-25 14:50:25

标签: go

Golang中是否存在一种可移植的方法来检测连接到另一个进程的管道的os.Stdout在读取端被关闭而没有写入任何内容?我正在编写一个命令行帮助程序,如果它的stdout已关闭,则应退出,例如,由于连接到管道读取端的进程已退出。例如,从像这样的shell运行时:

go run my_helper.go | sleep 1

当睡眠进程退出以关闭管道的读取端时,助手应退出,而无需等待明确的终止信号或触发最终向标准输出非零写入的输入。

尽管我可以定期轮询stdout来编写零长度切片,但是Go似乎优化了零长度写入,在这种情况下什么也没做。即

n, err := os.Stdout.Write(nil)

即使在读取端关闭了os.Stdout,也会返回0, nil

由于代码只需要在Linux上运行,因此原则上我可以使用syscall.Select解决此问题,并等待os.Stdout上的写入错误,但是也许我错过了一些东西。

0 个答案:

没有答案