python发消息_发送消息到Python脚本

I'm trying to write a little python program for shutdown or Reboot my Raspberry PI, drived by a button connected to an GPIO. The program can show the current status of the raspberry PI (Booting,Running,Halting,Rebooting) via two leds.

The python program is executed as daemon, started by a init.d bash script (written using the /etc/init.d/skeleton).

Now I can start/stop/verify the status of the daemon, and the daemon can check the input where the button is connected, to perform the command "shutdown -h now" or "shutdown -r now" .

For show the current status of the raspberry PI, I had thought of send messages to the daemon, using some script in the runlevels directorys, for change the status of the leds.

But I don't know how receive message in the python program.

Someone can help me?

Thanks.

解决方案

There are several methods to send a message from one script/app to another:

For you application a valid method is to use a named pipe. Create it using os.mkfifo, open it read-only in your python app and then wait for messages on it.

If you want your app to do another things while waiting, I reccomend you open the pipe in non-blocking mode to look for data availability without blocking your script as in following example:

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)

Then you can send messages from bash scripts using the command

echo "your message" > /tmp/mypipe

EDIT: I can not get select.select working correctly (I used it only in C programs) so I changed my recommendation to a non-bloking mode.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值