Передача аргументов в работающий скрипт python - PullRequest
1 голос
/ 21 марта 2020

У меня на малине запущен скрипт, который запускается из команды со страницы php. У меня есть несколько операторов if, теперь я хотел бы передать новые аргументы сценарию без его остановки. Я нашел много информации, передавая аргументы скрипту python, но это невозможно, если svpcript уже работает для передачи новых аргументов. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Лучшим вариантом для меня является использование файла конфигурации для ввода вашего скрипта. Какой-нибудь простой ямл подойдет. Затем в отдельном потоке вы должны наблюдать ха sh файла, если он изменился, это означает, что кто-то обновил ваш файл, и вы должны заново / отрегулировать свои входные данные.

В основном у вас работает постоянный наблюдатель все время.

0 голосов
/ 21 марта 2020

Вам действительно нужен какой-то механизм IP C. Когда вы выполняете / обновляете скрипт из приложения PHP, я бы посоветовал вам взглянуть на что-то вроде ZeroMQ, которое поддерживает и Python, и PHP, и позволит вам быстро и грязно * 1001 Реализация * Pub / Sub .

Основная идея c заключается в том, чтобы ваш скрипт 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();
* 1010. * Обратите внимание, я нашел вышеупомянутые примеры с помощью быстрого поиска в Google (и с небольшими поправками в образовательных целях), но они не проверены и предназначены исключительно для начала. Для получения дополнительной информации посетите ZeroMQ и php -zmq

Веселитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...