Задать вопрос
vpuhoff
@vpuhoff
Программист в свободное от работы время

Как правильно использовать FIFO в линукс?

Пытаюсь написать скрипт на питоне для управления плеером (omxplayer), не могу понять как правильно взаимодействовать с ним с помощью pipe, суть сделующая, есть скрипт, который ждет команд вида (включи это, выключи остальное и тп)
в идеале нужно запускать процесс плеера и ему на вход скармливать тунель, в который писать команды (он реагирует на команды типа p q и тп). За основу пытаюсь взять следующий пример:
$ mkfifo /tmp/mylog
$ exec 4<>/tmp/mylog
$ myprogram 2>&1 | tee >&4
$ cat /tmp/mylog # on demend

Но ничего дельного не выходит. Сам с линуксами не очень дружу, но сделать нужно)
  • Вопрос задан
  • 1364 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
valerium
@valerium
Изобретая велосипед
Именованный канал (FIFO) — это такой виртуальный файл. Как и с любым файлом, в него можно писать, и из него можно читать. Особенность в том, что один процесс может или только писать, или только читать.

С точки зрения программиста, достаточно просто открыть этот файл на запись и записывать туда то, что нужно. И всё.

Из шелла писать в файл проще всего перенаправлением вывода. То есть, чтобы послать команду q нужно сделать
echo q > /path/to/fifo

В пайтоне можно обойтись встроенной функцией open(), нужно только знать путь к каналу, который открывает плеер.

UPD. Но скорее всего, Вам нужны обычные неименованные каналы pipe. Для этого есть модуль subprocess, который может запустить указанное приложение и передавать ему команды на стандартный ввод. В документации к subprocess этот хорошо описано.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы