Как читать из 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
флаг статуса открытого файла.