Запуск сценария python несколько раз в качестве фонового процесса с другой конфигурацией - PullRequest
0 голосов
/ 20 февраля 2020

Я использовал php для запуска python сценария на Linux через веб после запуска, и я получаю идентификатор процесса

<!DOCTYPE html>
<html>
   <body>
      <?php
      echo 'Starting the mapping process';
      echo exec('nohup python cloudemir.py '.$_GET[message].' > /dev/null 2>&1 & echo $! &');
     ?>
  </body>
</html> 

, который затем используется для прекращения процесса, когда мне не нужно он прекрасно работает

<!DOCTYPE html>
<html>
    <body>
        <?php
        $pid=$_GET['pid'];
        echo exec("kill -9 $pid");
        ?>
    </body>
</html>

Используемый мной скрипт python просто публикует одно сообщение через MQTT каждую секунду. Проблема в том, что я не могу изменить содержание сообщения.

Если сообщение «Привет», и я запускаю этот процесс, оно говорит «Привет», «Привет» ... каждую секунду. Если я изменяю сообщение сценария python на Hi2 и запускаю его снова, я получаю новый идентификатор процесса, а новое сообщение - Hi2 каждую секунду, и сообщения Hi больше нет.

Мне нужно, чтобы оно запускалось отдельно и получить оба сообщения и при необходимости убить одно из них. Мне нужно, чтобы он мог запускать неограниченное количество экземпляров этого python sctipt с другой конфигурацией, мне не нужно создавать новые сценарии.

domain / run. php? Message = Hi

домен / запуск. php? Message = Hi2

Это должно вывести Hi, Hi2, Hi, Hi2

домен / запуск. php? Message = Hi

домен / запуск. php? Message = Hi2

домен / запуск. php? Message = Hi3

Это должно вывести Hi, Hi2, Hi3, Hi, Hi2, Hi3

В обоих случаях он печатает только последнее сообщение

Я пытался сделать то же самое без php, но вызывая скрипт из другого python скрипта с

proc = subprocess.Popen("nohup python cloudemir.py "+content+" > /dev/null 2>&1 &", shell=True)

Но он остается прежним, последний вызов перезаписывает предыдущий

1 Ответ

1 голос
/ 20 февраля 2020

Вы должны использовать sys.argv. В качестве примера файла cloudemir.py:

import sys

print(sys.argv[0])

И затем вы можете вызвать его с помощью:

python cloudemir.py Hi # First time
python cloudemir.py Hi2 # Second time

Таким образом, имя после cloudemir.py будет введено как параметр к программе python.

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