如何重启Python脚本?
我刚开始学习Python,知道这个问题可能被认为是重复的,因为我已经搜索过解决方案,但不幸的是,没有一个对我有效。我想要重新启动脚本,也就是说要重新运行正在进行的进程,或者创建一个新的进程并结束之前的那个。
目前我在使用 Python 3.11.2
运行脚本,我尝试过 os.execv(sys.executeable, ['python'] + sys.argv)
,但对我来说,这个方法就像 exit()
一样,它会结束脚本,而不会重新启动。我用 os.system("py "+sys.argv[0])
更接近了,但这里又出现了另一个问题,就是它会创建一个新的进程,但这个新进程似乎依赖于之前的那个,所以我不能简单地在我的代码中调用 exit()
来停止它。
import os
import sys
from multiprocessing import Process
def run():
print("Running tests...")
def restart():
print("Restarting...")
os.system("python " + sys.argv[0])
exit()
textInput = "N"
print("Starting...")
while textInput.startswith("N"):
run()
textInput = input("Restart ? (Y/N)")
if textInput.startswith("Y"):
restart()
1 个回答
0
你在使用 os.execv()
的时候出错了,不能把一个字符串和一个列表直接拼在一起。不过,你可以把两个列表拼在一起,所以你需要把可执行文件的名字放在一个列表里。
os.execv(sys.executable, [sys.executable] + sys.argv)
你也可以使用 os.execl()
,并把 sys.argv
里的内容分开作为不同的参数传入。
os.execl(sys.executable, sys.executable, *sys.argv)
记录:
$ python testrestart.py
Starting...
Running tests...
Restart ? (Y/N)Y
Restarting...
Starting...
Running tests...
Restart ? (Y/N)Y
Restarting...
Starting...
Running tests...
Restart ? (Y/N)N
Running tests...
Restart ? (Y/N)N
Running tests...
Restart ? (Y/N)Q