我想将命令从脚本发送到 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 进程运行。