簡體   English   中英

如何從 os.pipe() 讀取而不被阻塞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM