[英]How to read from an os.pipe() without getting blocked?
我正在嘗試從打開的os.pipe()
中讀取,以查看它在讀取時是否為空。 問題是調用read()
會導致程序在那里阻塞,直到那里實際上有東西可以讀取,但是如果我正在做的測試成功,就不會有任何東西。
我知道我可以使用select.select()
超時但是我想知道是否有其他解決方案。
你可以試試這個。
import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK)
有了這個thePipe.read()
應該是非阻塞的。
從管道(7)手冊頁:
如果一個進程試圖從一個空的 pipe 中讀取,那么 read(2) 將阻塞直到數據可用。 (...) 通過使用 fcntl(2)
F_SETFL
操作啟用O_NONBLOCK
打開文件狀態標志,可以實現非阻塞 I/O。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.