Does python's sys.stdin.read() block?

爷,独闯天下 提交于 2019-12-01 05:12:25
MrGomez

By default, sys.stdin.read() and sys.stdin.read(n) are blocking calls. I would assume the consumption of 100% CPU is actually attributable to streaming data into your script or some other behavior not cited here.

Upon looking at the help documentation for sys.stdin.read, I noticed this:

read(...)

read([size]) -> read at most size bytes, returned as a string.

If the size argument is negative or omitted, read until EOF is reached. Notice that when in non-blocking mode, less data than what was requested may be returned, even if no size parameter was given.

(Emphasis mine.)

This implies blocking mode is the default behavior, which is consistent with my experience. It also led me to track down similar questions on SO. Voila: Non-blocking read on a subprocess.PIPE in python

Good luck with your adaptation!

It works OK on my machine (i.e. blocks with negligent CPU usage while it's reading) - can you check it from a simple command line script before? Also, I tested this within Linux, might be different on other platforms.

Is there a chance the stream has been closed (e.g. EOF was sent)?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!