2016-10-16 3 views
0

Я создал сторожевой таймер для моего скрипта (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() 

ответ

0

Похоже, вы используете многопоточность в оригинальном сценарии, который объясняет, почему вы не можете разбить свой оригинальный сценарий, когда просто нажав 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...") 

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

+0

Спасибо за ответ! Проблема, с которой я сталкиваюсь, - это не со сценарием, который не показан, а скорее с кодом, который опубликован. Оказывается, он отлично работает, когда я дважды запускаю скрипт для запуска его в Windows, однако, когда я набираю «python myscript.py» из командной строки, он не работает. Никаких текущих проблем в Linux тоже нет. – NJC

 Смежные вопросы

  • Нет связанных вопросов^_^