![](/img/trans.png)
[英]Running a Python script in Jupyter Notebook, with arguments passing
[英]Passing arguments to a running python script
我有一个在我的树莓派上运行的脚本,这些脚本是从 php 页面的命令启动的。 我有多个 if 语句,现在我想在不停止脚本的情况下将新参数传递给脚本。 我通过将参数传递给 python 脚本找到了很多信息,但如果可能的话,当 svpcript 已经在运行以传递新参数时,我发现了很多信息。 提前致谢!
对我来说最好的选择是为您的脚本使用配置文件输入。 一些简单的 yaml 就可以了。 然后在一个单独的线程中,您必须观察文件的哈希值,如果它被更改,则意味着有人更新了您的文件,您必须重新/调整您的输入。
基本上,您一直在运行那个恒定的观察者。
您确实需要某种 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();
请注意,我使用快速谷歌搜索找到了上述示例(并出于教育目的稍作修改),但它们未经测试,纯粹是为了让您入门。 有关更多信息,请访问ZeroMQ和php-zmq
玩得开心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.