У меня есть короткий скрипт на python, который получает имена файлов из FIFO Unix и выполняет некоторую обработку файла.На моем настольном компьютере (Debian unstable, x86) скрипт работает должным образом, получая каждое имя файла только один раз и обрабатывая его.На моем Raspberry Pi (Raspbian 9, armhf) тот же сценарий вместо этого считывает значения из FIFO, закрывает его, затем снова открывает и снова считывает те же значения.Оба компьютера работают под управлением Python 3.5.3.
#!/usr/bin/python3
import os, grp
from formatim import prepare_image
FIFO_PATH='/tmp/sticker-format-fifo'
try:
os.mkfifo(FIFO_PATH)
os.chown(FIFO_PATH, -1, grp.getgrnam("stickersubmitters").gr_gid)
os.chmod(FIFO_PATH, 0o770)
except OSError as e:
print('file exists, probably: ', e)
while True:
fifo = open(FIFO_PATH, 'r')
print('FIFO opened')
for line in fifo:
print("Job:", line)
(length, fname) = prepare_image(line.replace('\n', ''))
print("Done: ", length, fname)
fifo.close()
К сожалению, короткий сценарий bash на Pi действительно читает из FIFO, как и ожидалось:
#!/bin/bash
fifo_name="/tmp/sticker-format-fifo"
while true
do
if read line; then
echo $line
fi
done <"$fifo_name"
Есть ли способ заставить скрипт python вести себя так, как задумано на Pi