![](/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.