go - 检测连接到管道的标准输出在golang的读取端关闭
问题描述
Golang 中是否有一种可移植的方式来检测连接到另一个进程的管道的 os.Stdout 在读取端关闭而不向其写入内容?我正在编写一个命令行助手,如果它的标准输出被关闭,它应该退出,因为例如,连接到管道读取端的进程退出了。例如,当从 shell 运行时:
go run my_helper.go | sleep 1
当睡眠进程退出关闭管道的读取端而不等待显式终止信号或触发最终非零写入标准输出的输入时,助手应该退出。
我虽然可以定期轮询 stdout 写入零长度切片,但似乎 Go 优化了零长度写入并且在这种情况下什么也没做。IE
n, err := os.Stdout.Write(nil)
0, nil
即使 os.Stdout 在读取端关闭,也会返回。
由于代码只需要在 Linux 上运行,我原则上可以使用syscall.Select
并等待写入错误来解决这个问题os.Stdout
,但也许我错过了一些东西。
解决方案
推荐阅读
- javascript - PHP注册从返回到错误的URL而不是索引,数据库错误?
- reactjs - 设置 lint-staged for jest
- login - 如何在Angular 6中为不同用户使用相同的登录页面
- reactjs - onBlur 函数 - setState 不正确
- openssl - 已验证与 azdcs-gov.mail.protection.outlook.com 建立的 TLS 连接
- linux - UnrealBuildTool:ld.lld:错误:找不到库
- docker - Docker 保存不同的镜像和容器
- mysql - 存储订单项目和项目可以有子项目有什么不同的方式?
- java - 静态变量的异常
- html - 材料分页下拉不合适