Python重新启动程序

5

我写了一个程序,在结束时会询问是否重新启动。

我使用import os并使用os.execl(sys.executable, sys.executable, *sys.argv),但是没有任何反应,为什么呢?

以下是代码:

restart = input("\nDo you want to restart the program? [y/n] > ")
if str(restart) == str("y"):
    os.execl(sys.executable, sys.executable, * sys.argv) # Nothing hapens
else:
    print("\nThe program will be closed...")
    sys.exit(0)

2
这很不寻常。你为什么要在程序内部尝试重新调用程序? - Makoto
1
重启== 'y', str 是冗余的。 为什么不直接使用while呢? - cs95
@claudio26 尝试一下:os.execv(sys.executable, ['python'] + sys.argv) - Anup
@Anup,是的,问题解决了。非常感谢 :) - claudio26
5
看起来这是一个 XY 问题。正确的实现方式是重新构建代码,以便您可以简单地调用一个函数来重新运行程序。 - ekhumoro
5个回答

6
import os
import sys

restart = input("\nDo you want to restart the program? [y/n] > ")

if restart == "y":
    os.execl(sys.executable, os.path.abspath(__file__), *sys.argv) 
else:
    print("\nThe program will be closed...")
    sys.exit(0)

os.execl(path, arg0, arg1, ...)

sys.executable: Python可执行文件

os.path.abspath(__file__): 正在运行的Python代码文件。

*sys.argv: 剩余的参数。

它会像python XX.py arg1 arg2一样再次执行程序。


4
也许可以使用os.execv,但如果你已经设置了环境和路径变量,为什么不直接使用os.system('python "filename.py"')呢?
import os

print("Hello World!")
result=input("\nDo you want to restart the program? [y/n] > ")
if result=='y':
     os.system('python "C:/Users/Desktop/PYTHON BEST/Hackerrank.py"')
else:
     print("\nThe program will be closed...")

0

只需导入您想要重新启动并在所需条件下运行的程序,如下所示

标题:hello.py

import hello 
if (enter generic condition here):
    hello

目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0
os.execv(sys.executable, ['python'] + sys.argv)

问题已解决。


这段代码似乎是重新启动Python程序最常见的方式。我猜你被点踩是因为缺乏解释。请注意,在Windows上,os.execv并不是一个很好的选择。https://bugs.python.org/issue19124 - ReenigneArcher

0

尝试使用;

while True:
    answer = input("\nDo you want to restart the program? [y/n] > ")
    if answer == "n":
        print("\nOk, Bye!")
        break   

或者

retry = True
while retry:
    answer = input("\nDo you want to restart the program? [y/n] > ")
    if answer == "n":
        print("\nOk, Bye!")
        retry = False

这是一种可以轻松修改以适应您的喜好的方式,并且也意味着您可以一次性加载变量而不是每次重新启动时都加载。这只是一种无需任何库就可以完成的方法。您要缩进所有代码并将其放入一个 while 循环中,该 while 循环确定您的代码是否重新启动。要退出它,请输入一个 break 或更改一个变量。它最容易使用,因为您不必理解新库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接