将参数传递给正在运行的python脚本

问题描述 投票:1回答:2

我在树莓派上运行了一个脚本,这些脚本是从php页面上的命令启动的。我有很多话要讲,现在我想在不停止脚本的情况下将新参数传递给脚本。通过将参数传递给python脚本,我发现了很多信息,但是在svpcript已经运行以传递新参数的情况下,如果不能的话。预先感谢!

python raspberry-pi3
2个回答
1
投票

对我来说,最好的选择是为您的脚本使用配置文件输入。一些简单的yaml就可以了。然后,在一个单独的线程中,您必须观察文件的哈希,如果它被更改,表示有人更新了您的文件,您必须重新/调整您的输入。

基本上,您的常量观察者一直在运行。


0
投票

您确实需要某种IPC机制。当您从PHP应用程序执行/更新脚本时,建议您研究一下ZeroMQ之类的东西,该东西同时支持Python和PHP,并允许您执行快速而肮脏的Pub/Sub实现。

基本思想是,将您的python脚本视为来自PHP应用程序的消息的订阅者,该消息会在需要时发布。为此,您将需要启动python“脚本”一次,并使其在后台运行,在ZeroMQ上侦听消息。这样的事情应该可以让您进入

import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    #  Wait for next message from from your PHP application
    message = socket.recv()
    print("Recieved a message: %s" % message)

    #  Here you should do the work you need to do in your script

    #  Once you are done, tell the PHP application you are done
    socket.send(b"Done and dusted")

然后,在您的PHP应用程序中,您可以使用类似以下的内容将消息发送到您的Python服务

$context = new ZMQContext();

//  Socket to talk to server

$requester = new ZMQSocket($context, ZMQ::SOCKET_REQ);
$requester->connect("tcp://localhost:5555");

$requester->send("ALL THE PARAMS TO SEND YOU YOUR PYTHON SCRIPT");
$reply = $requester->recv();

[注意,我使用快速的Google搜索找到了以上示例(出于教育目的对其进行了略微修改),但是这些示例未经测试,纯粹是为了帮助您入门。有关更多信息,请访问ZeroMQphp-zmq

玩得开心。

© www.soinside.com 2019 - 2024. All rights reserved.