我有一个简短的python脚本,该脚本从Unix FIFO接收文件名,并对文件进行一些处理。在我的台式机(Debian不稳定,x86)计算机上,脚本按预期运行,仅接收一次每个文件名并进行处理。在我的树莓派(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()
令人警觉的是,Pi上的简短bash脚本确实按预期从FIFO中读取:
#!/bin/bash
fifo_name="/tmp/sticker-format-fifo"
while true
do
if read line; then
echo $line
fi
done <"$fifo_name"
是否有一种方法可以使python脚本在Pi上达到预期的作用?