Python FIFO在Raspberry Pi上的行为有所不同

时间:2018-12-06 07:42:26

标签: python raspberry-pi mkfifo

我有一个简短的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上达到预期的作用?

0 个答案:

没有答案