簡體   English   中英

多次運行 python 腳本作為具有不同配置的后台進程

[英]Run python script multiple times as a background process with different configuration

運行后,我使用 php 在 Linux 上通過 web 運行 python 腳本,並獲得進程 ID

<!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,然后再次運行它,我會得到新的進程 ID,新消息每秒為 Hi2,並且不再有 Hi 消息。

我需要它單獨運行並獲取兩條消息,並在需要時殺死其中一個。 我需要它能夠以不同的配置運行該 python sctipt 的無限數量的實例,我不需要構建新腳本。

domain/run.php?message=Hi

域/run.php?message=Hi2

這應該打印 Hi, Hi2, Hi, Hi2

domain/run.php?message=Hi

域/run.php?message=Hi2

域/run.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)

但它保持不變,最后一次調用覆蓋了前一次調用

你應該使用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 程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM