我正在尝试编写一个小 python 程序来关闭或重新启动我的 Raspberry PI,由连接到 GPIO 的按钮驱动。该程序可以通过两个 LED 显示树莓派的当前状态(启动、运行、停止、重启)。
python 程序作为守护进程执行,由 init.d bash 脚本(使用 /etc/init.d/sculpture 编写)启动。
现在我可以启动/停止/验证守护进程的状态,并且守护进程可以检查连接按钮的输入,以执行命令“shutdown -h now”或“shutdown -r now”。
为了显示树莓派的当前状态,我曾想过使用运行级别目录中的一些脚本向守护进程发送消息,以更改 LED 的状态。
但我不知道如何在python程序中接收消息。
有人可以帮助我吗?
Thanks.
有多种方法可以将消息从一个脚本/应用程序发送到另一个脚本/应用程序:
对于您的应用程序来说,有效的方法是使用命名管道。使用创建它os.mkfifo,在 python 应用程序中以只读方式打开它,然后等待其上的消息。
如果您希望应用程序在等待时执行其他操作,我建议您以非阻塞模式打开管道以查找数据可用性,而不会阻塞脚本,如下例所示:
import os, time
pipe_path = "/tmp/mypipe"
if not os.path.exists(pipe_path):
os.mkfifo(pipe_path)
# Open the fifo. We need to open in non-blocking mode or it will stalls until
# someone opens it for writting
pipe_fd = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK)
with os.fdopen(pipe_fd) as pipe:
while True:
message = pipe.read()
if message:
print("Received: '%s'" % message)
print("Doing other stuff")
time.sleep(0.5)
然后您可以使用以下命令从 bash 脚本发送消息
echo "your message" > /tmp/mypipe
EDIT:我无法让 select.select 正常工作(我只在 C 程序中使用它),所以我将建议更改为非阻塞模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)