Как читать из os.pipe() без блокировки?

Я пытаюсь читать с открытого os.pipe() чтобы увидеть, пусто ли оно в момент чтения. Проблема в том, что вызов read() вызывает блокировку программы до тех пор, пока там действительно что-то не будет прочитано, но не будет, если тест, который я делаю, прошел успешно.

Я знаю, что могу использовать select.select() с таймаутом, однако, я хотел знать, есть ли другое решение проблемы.

1 ответ

Решение

Вы можете попробовать это.

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

С этим thePipe.read() должен быть неблокирующим.

Из трубы (7):

Если процесс попытается прочитать из пустого канала, read(2) будет блокироваться, пока данные не станут доступны. (...) Неблокируемый ввод / вывод возможен при использовании fcntl(2) F_SETFL операция, чтобы включить O_NONBLOCK флаг статуса открытого файла.

Другие вопросы по тегам