Как перезапустить работающий скрипт Python из основного скрипта Python? - PullRequest
2 голосов
/ 02 ноября 2019

Я знаю, что

os.execl(sys.executable, sys.executable, *sys.argv)

перезапускает текущий запущенный скрипт Python. Но как мне перезапустить другой работающий скрипт python из основного работающего скрипта python?

1 Ответ

0 голосов
/ 02 ноября 2019

Вы можете сделать это следующим образом:

основной процесс - main.py:

import time
import subprocess as sp


def restart_subprocess(sub_process, commands):
    sub_process.kill()  # kill old one process
    time.sleep(1)
    print("Restarted")
    return sp.Popen(commands)  # start a new one, hereby restart it


if __name__ == "__main__":
    while True:
        x = sp.Popen(["python", "sub.py"],)  # start subprocess
        time.sleep(2)  # show that it works
        y = restart_subprocess(x, ["python", "sub.py"])  # restart it, actually make a new one
        if y.wait(10) == 100:  # wait at least 10 seconds ore receive exit code from child process and check it
            print("Finish!")
            break

Обратите внимание, что если вы работаете в Linux, вам нужно указать версию Python ["python3", "sub.py"]

дочерний процесс - sub.py:

import time
import sys

if __name__ == "__main__":
    for i in range(5):
        print(i)
        time.sleep(1)
    sys.exit(100)

Надеюсь, что это помогло, не стесняйтесь задавать вопросы.

...