运行无限循环并从“外部”获取命令(例如shell或其他脚本)

2024-03-29 09:00:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的树莓圆周率工作,这是处理一些WS2812B的RGB发光二极管。我可以用neopixel库和Python控制光线和一切。现在很好。你知道吗

我希望这个Python脚本运行一个只处理光管理的无限循环。调暗LED,改变颜色等等。但是,我希望能够从其他脚本获取命令。假设我想输入一个shell命令来改变颜色。在我的无限Python脚本(LED处理程序)中,我将能够识别这个命令并将颜色或灯光模式柔和地更改为所需的颜色。你知道吗

一个想法是,如果有新命令,就要不断地查看文本文件。我的shell脚本能够在这个文本文件中插入命令行。你知道吗

但是你能告诉我,有没有更好的解决办法?你知道吗

非常感谢。你知道吗


Tags: 命令脚本处理程序led颜色rgbshell树莓
3条回答

您可以使用ZeroMQ并在本地托管它。它提供bindings for Python。下面是一个示例脚本(发送方和接收方):

from threading import Thread
import zmq


class Sender(Thread):
    def run(self):
        context = zmq.Context()
        socket = context.socket(zmq.PUB)
        socket.connect('tcp://127.0.0.1:8000')
        while True:
            socket.send_string(input('Enter command: '))


class Receiver(Thread):
    def run(self):
        context = zmq.Context()
        socket = context.socket(zmq.SUB)
        socket.bind('tcp://127.0.0.1:8000')
        socket.setsockopt(zmq.SUBSCRIBE, b'')
        while True:
            data = socket.recv().decode('ascii')
            print(data)  # Do stuff with data.

接收方是控制RPi上的灯光的实例,发送方是允许您输入各种命令的命令行脚本。优点是ZeroMQ支持bindings for various programming languages,您还可以通过网络发送/接收命令。你知道吗

我建议用python脚本打开一个端口,并让它从该端口接收命令(网络编程)。尽管这会使您的项目更加复杂,但它是一个非常健壮的实现。你知道吗

一种方法是公开一个TCP服务器,然后通过TCP与Python进程通信。这里有一个关于如何创建TCP服务器的简单示例,展示了服务器脚本(运行led)和命令脚本:example

相关问题 更多 >