Могу ли я открыть именованный канал в Linux для незаблокированной записи в Python?

Я создал файл fifo, используя mkfifo . Можно ли открывать / писать для этого без блокировки? Я бы хотел быть агностиком, есть ли читатель или нет.

Следующие:

 with open('fifo', 'wb', 0) as file: file.write(b'howdy') 

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

Есть ли другой механизм linux, который я должен использовать, возможно?

One Solution collect form web for “Могу ли я открыть именованный канал в Linux для незаблокированной записи в Python?”

От man 7 fifo :

Процесс может открыть FIFO в неблокирующем режиме. В этом случае открытие или только чтение будет успешным, даже если никто еще не открыл на стороне записи, открытие для записи только с ошибкой с ENXIO (нет такого устройства или адреса), если другой конец уже не открыт.

Итак, первое решение – открытие FIFO с помощью O_NONBLOCK . В этом случае вы можете проверить errno : если он равен ENXIO , вы можете попробовать открыть FIFO позже.

 import errno import posix try: posix.open('fifo', posix.O_WRONLY | posix.O_NONBLOCK) except OSError as ex: if ex.errno == errno.ENXIO: pass # try later 

Другим возможным способом является открытие FIFO с флагом O_RDWR . В этом случае он не будет блокироваться. Другой процесс может открыть его с O_RDONLY без проблем.

 import posix posix.open('fifo', posix.O_RDWR) 
 
Interesting Posts for Van-Lav

Аудиозапись в Python

Установка пакета Python из Github с помощью PIP

Python Flask, как установить тип содержимого

Прочитать текстовый файл в словаре, удаляя заголовок / завершающие символы новой строки

Импорт и использование стандартного модуля Python из внутреннего расширения Python C

Загрузка Django: удалять загруженные дубликаты, использовать существующий файл (проверка на основе md5)

Могу ли я использовать MySQL на Django (dev 1.6.x) с Python3.x?

Почему Pylint дает ошибку E0702, поднимая NoneType, в этом выражении raise?

python whoosh IndexingError при прерывании

В Python я могу указать аргумент аргумента функции в терминах других аргументов?

Python украшает класс для изменения типа родительского объекта

Что происходит, когда вы вызываете `if key in dict`

Что такое «хорошая» палитра для расходящихся цветов в R? (или: можно ли вириди и магму объединить вместе?)

может быть установлен OpenCV в виртуальной среде python на Mac Mountain Lion

Есть ли модуль для python, который распознает лица?

Python - лучший язык программирования в мире.