Самостоятельный перезапуск скрипта Python

Я создал сторожевой таймер для моего скрипта (Python 3), который позволяет мне остановить выполнение, если что-то пойдет не так (не показано в коде ниже). Однако я хотел бы иметь возможность автоматически перезапускать скрипт, используя только Python (без внешних скриптов). Код должен быть кросс-платформенным.

Я пробовал подпроцесс и execv (os.execv(sys.executable, ['python'] + sys.argv)), однако я вижу очень странную функциональность в Windows. Я открываю командную строку и запускаю скрипт ("python myscript.py"). Сценарий останавливается, но не завершается (проверяется с помощью диспетчера задач), и он не будет перезапущен, пока я не нажму дважды клавишу ввода. Я хотел бы, чтобы это работало автоматически.

Какие-либо предложения? Спасибо за вашу помощь!

import threading
import time
import subprocess
import os
import sys

if __name__ == '__main__':
    print("Starting thread list: " + str(threading.enumerate()))

    for _ in range(3):
        time.sleep(1)
        print("Sleeping")

    ''' Attempt 1 with subprocess.Popen '''
    # child = subprocess.Popen(['python',__file__], shell=True)

    ''' Attempt 2 with os.execv '''
    args = sys.argv[:]
    args.insert(0, sys.executable)
    if sys.platform == 'win32':
        args = ['"%s"' % arg for arg in args]
    os.execv(sys.executable, args)

    sys.exit()

1 ответ

Похоже, вы используете многопоточность в исходном сценарии, что объясняет, почему вы не можете разорвать исходный сценарий, просто нажав Ctrl+C. В этом случае вы можете добавить исключение KeyboardInterrupt к вашему сценарию, например так:

from time import sleep
def interrupt_this()
    try:
         while True:
             sleep(0.02)
    except KeyboardInterrupt as ex:
         # handle all exit procedures and data cleaning
         print("[*] Handling all exit procedures...")

После этого вы сможете автоматически перезапустить соответствующую процедуру (даже из самого скрипта, без каких-либо внешних скриптов). В любом случае, это трудно понять, не видя соответствующего сценария, так что, может быть, я могу помочь вам, если вы поделитесь некоторыми из них.

Другие вопросы по тегам