如何从 python 主脚本重新启动 运行 python 脚本?
How to restart a running python script from a main python script?
我知道
os.execl(sys.executable, sys.executable, *sys.argv)
重新启动当前 运行 python 脚本。但是如何从主 运行 python 脚本重新启动另一个 运行 python 脚本?
您可以通过以下方式进行:
主进程 - 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)
希望对您有所帮助,欢迎提问。
我知道
os.execl(sys.executable, sys.executable, *sys.argv)
重新启动当前 运行 python 脚本。但是如何从主 运行 python 脚本重新启动另一个 运行 python 脚本?
您可以通过以下方式进行:
主进程 - 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)
希望对您有所帮助,欢迎提问。