从脚本通过管道传输到 fifo

从脚本通过管道传输到 fifo

我想将命令从脚本发送到 twinkle(VOIP 软件)。我想我可以用命名管道来做到这一点,所以我创建了一个

mkfifo phonecmd

如果我启动 twinkle 并将 tail 从命名管道传输到它,我可以通过写入命名管道来发送命令

tail -f phonecmd | twinkle -c
...
echo answer > phonecmd

但我真正想要的是使用 python 脚本发送命令来监视树莓派中的 GPIO 引脚,但我不知道该怎么做。

python gpio.py

将打印“answer”或“bye”,具体取决于树莓派上的 GPIO 引脚是否更改。

python gpio.py | phonecmd

这给了我一个错误,因为phonecmd不是一个命令(它是一个命名管道)。

python gpio.py > phonecmd

这只是一种有效的方法。重定向是缓冲的,因此只有在 python 进程关闭后,所有内容才会写入phonecmd 管道。

有没有办法让重定向或管道“实时”?

答案1

|管道运算符不起作用的原因是管道运算符需要另一个命令。输出重定向运算符>输出到文件,命名管道是一般意义上的文件,只是不是常规文件。

管道的输出通常是缓冲的,您可以刷新输出流,也可以更改标准输出的缓冲。

在你的情况下,最优雅的解决方案是在Python中打开命名管道,写入字符串(“answer”或“bye”),然后关闭文件/管道。这样你就解耦了服务器进程和Python客户端。您甚至可以重新启动服务器进程 ( twinkle -c) 并保持 Python 进程运行。

相关内容