如何重启Python脚本?

0 投票
1 回答
52 浏览
提问于 2025-04-14 17:38

我刚开始学习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

撰写回答