Я создал сторожевой таймер для моего скрипта (Python 3), который позволяет мне остановить выполнение, если что-то пойдет не так (не показано в коде ниже). Тем не менее, я хотел бы иметь возможность перезапускать сценарий автоматически, используя только Python (без внешних скриптов). Код должен быть совместим с кросс-платформой.Self Restarting a Python Script
Я пробовал подпроцесс и 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()
Спасибо за ответ! Проблема, с которой я сталкиваюсь, - это не со сценарием, который не показан, а скорее с кодом, который опубликован. Оказывается, он отлично работает, когда я дважды запускаю скрипт для запуска его в Windows, однако, когда я набираю «python myscript.py» из командной строки, он не работает. Никаких текущих проблем в Linux тоже нет. – NJC