У меня есть скрипт на python под названием forever.py, который я запускаю через редактор локальной групповой политики Windows.Скрипт располагается в каталоге C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
.Вот этот сценарий:
import subprocess
from time import sleep
import logging.config
# Makes server_receiver.py run forever unless there is an error with this script
LOGGER_NAME = 'STARTUP_RECEIVER'
logging.config.fileConfig('C:\\Automation\\startup\\config\\startup_receiver.conf')
logger = logging.getLogger(LOGGER_NAME)
while True:
p = subprocess.Popen(['python', r'C:\Automation\startup\hello.py'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = p.communicate()
rc = p.returncode
if rc != 0:
logger.debug('{}'.format(error))
sleep(5)
continue
else:
logger.debug('Test Passed with return code {}'.format(rc))
sleep(5)
pass
Этот сценарий просто запускает другой сценарий Python под названием hello.py
, который печатает hello
.Поскольку этот сценарий начинается при запуске и запускается в фоновом режиме, мне было интересно, есть ли способ добавить что-либо в сценарий или в другой сценарий, который позволил бы мне уничтожить forever.py.Я думаю, что, поскольку этот скрипт работает в фоновом режиме, я не могу использовать argparse, чтобы добавить опцию, скажем, '-stop', которая убьет текущий pid.Единственное другое решение, которое приходит на ум, - убить этот скрипт другим скриптом, который я не уверен, как бы я это сделал.Я не верю, что есть другой способ получить pid другого запущенного скрипта, как в Linux.У кого-нибудь есть идеи, что я могу сделать здесь?Кроме того, могут быть некоторые проблемы с разрешениями, поскольку каталог сценариев запуска загружается в C: \ windows \ system32.