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

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

Следующие:

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

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

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

От 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)