Есть ли способ заставить подпроцесс python не завершаться после однократного запуска скрипта? - PullRequest
0 голосов
/ 01 января 2019

Рассмотрим следующие 2 файла

script_to_start_other_script.py

import schedule
import time
import subprocess 

def run_again():
    subprocess.call(["bash", "-c", "" + "  nohup python script_to_be_started.py > /dev/null 2>&1&"])  


if __name__== "__main__":

    schedule.every(5).seconds.do(run_again)

    while True:
        schedule.run_pending()
        time.sleep(1)
        pass

script_to_be_started.py

import logging
from logging.handlers import TimedRotatingFileHandler

# Init logger
logger = logging.getLogger('test_log')
hdlr = logging.handlers.TimedRotatingFileHandler('./test_log.log', when='h', interval=10)
formatter = logging.Formatter('%(asctime)s %(levelname)s : %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
logger.info('Beginning of test_log.py')

import schedule

def run_again():
    logger.info('I am being called')

if __name__== "__main__":
    schedule.every(5).seconds.do(run_again)

    while True:
        logger.info('how many time am I being called')  
        schedule.run_pending()
        time.sleep(1)
        pass

Всякий раз, когда я запускаю script_to_start_other_script.py, script_to_be_started.py будет толькозапускать весь скрипт один раз

logger.info('how many time am I being called')  

будет печататься только один раз, даже если есть цикл while.Есть ли способ, чтобы скрипт продолжал работать?

1 Ответ

0 голосов
/ 01 января 2019

Я попробовал первый сценарий, а второй постоянно запускал.Попробуйте просто запустить script_to_be_started.py и убедиться, что он работает нормально.Одной из причин того, что второй сценарий выполнялся до оператора журнала, может быть отсутствие импорта времени.

import time

Таким образом, после печати сообщения журнала второй сценарий будет молча зависать из-за отсутствия импорта.

Я предполагаю, что вы только урезали логи, но отсутствующий импорт времени фактически является частью вашего кода.

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