2013-10-02 4 views
0

Что это за инверсия?Сделать поток read() блокировки

fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, os.O_NONBLOCK) 

Я попытался

fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, os.O_BLOCK) 

, но это приводит к AttributeError: 'module' object has no attribute 'O_BLOCK'.

Чтобы дать небольшой фон, я собираю данные в кусках в STDIN процесса popen. Если в STDOUT есть данные, мне нужно сразу же прочитать их и передать обратно клиенту (следовательно, переключиться на неблокирование). Однако, когда я закончил данные о трубопроводах, мне нужно заблокировать, пока я не получу EOF в STDOUT. (? В идеале кросс-платформенный)

Если есть лучший способ сделать это, то я все уши

ответ

1

Получить текущий флаг и выключить O_NONBLOCK бит:

flag = fcntl.fcntl(MyStream.fileno(), fcntl.F_GETFL) 
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, flag & ~os.O_NONBLOCK) 
+0

Спасибо, что сделали это – Basic

 Смежные вопросы

  • Нет связанных вопросов^_^