2009-03-23 29 views
8

Tôi đang cố gắng đọc từ một số điện thoại mở os.pipe() để xem nó có trống không tại thời điểm đọc sách. Vấn đề là gọi read() làm cho chương trình chặn ở đó cho đến khi có thực sự là một cái gì đó để đọc có tuy nhiên sẽ không có bất kỳ, nếu thử nghiệm tôi đang làm thành công.Cách đọc từ os.pipe() mà không bị chặn?

Tôi biết tôi có thể sử dụng select.select() với thời gian chờ tuy nhiên tôi muốn biết liệu có giải pháp nào khác cho sự cố hay không.

Trả lời

14

Bạn có thể thử điều này.

import os, fcntl 
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

Với điều này thePipe.read() không được chặn.

Từ trang pipe(7) người đàn ông:

Nếu một quá trình cố gắng để đọc từ một ống rỗng , sau đó đọc (2) sẽ chặn đến khi dữ liệu có sẵn. (...) Không thể chặn I/O bằng cách sử dụng hoạt động fcntl (2) F_SETFL đến bật trạng thái tệp O_NONBLOCK trạng thái mở .

+1

Cảm ơn bạn rất nhiều. Đây chính xác là những gì tôi cần. – mpeterson

+1

Yesssss! Cảm ơn bạn! – juliomalegria

+0

hãy cẩn thận: các phương pháp tệp như '.readline()' có thể không mong đợi một chế độ không chặn. – jfs

Các vấn đề liên quan