2016-03-15 339 views
0

如何让python程序自动重启?所以我们可以说有像一个非常简单的程序:如何使Python程序自动重新启动

var = input("Hi! I like cheese! Do you like cheese?").lower()   
    if var == "yes": 
     print("That's awesome!") 

现在,在Python Shell中,你将不得不请按“运行”按钮,然后点击“运行模块(F5)”或只是“F5 '键盘上的按钮。这是你第一次运行它。程序结束后,您将返回到您的'Cheese.py'文件,然后按'f5'再次运行该程序。大家都在我这里吗? 好的,所以我的问题是,你如何让程序自动重新启动而不必手动执行?

+3

你的意思,你只是想循环程序,或重新加载它,或...什么?你试图解决的实际问题是什么? – jonrsharpe

+0

把@ jonrsharpe的评论放在代码中:'True:main()'呢?假设'main()'是你正在调用的函数。 – morxa

回答

5

这取决于你的意思是“重新启动自己”。如果你只是想继续执行相同的代码,你可以在一个功能包,然后从while True循环中调用它,如:

>>> def like_cheese(): 
...  var = input("Hi! I like cheese! Do you like cheese?").lower() # Corrected the call to `.lower`. 
...  if var == "yes": 
...   print("That's awesome!") 
... 
>>> while True: 
...  like_cheese() 
... 
Hi! I like cheese! Do you like cheese?yes 
That's awesome! 
Hi! I like cheese! Do you like cheese?yes 
That's awesome! 

如果你想实际上重新启动脚本,您可以再次执行该脚本,通过执行以下操作与更换新的当前进程:

#! /bin/env python3 
import os 
import sys 

def like_cheese(): 
    var = input("Hi! I like cheese! Do you like cheese?").lower() 
    if var == "yes": 
     print("That's awesome!") 

if __name__ == '__main__': 
    like_cheese() 
    os.execv(__file__, sys.argv) # Run a new iteration of the current script, providing any command line args from the current iteration. 

这将不断重新运行该脚本,提供从当前版本的命令行参数到新版本。关于这种方法的更详细的讨论可以在文章“Restarting a Python Script Within Itself”的Petr Zemek中找到。

一个项目是this article注释是:

如果你使用上面的解决方案,请记住,在exec*() 功能导致当前过程需立即更换, without flushing opened file objects。因此,如果在重新启动脚本时有任何 已打开的文件,则应在调用exec*() 函数之前使用f.flush()os.fsync(fd)将它们冲刷为 。

0

你可以用在while True:东西,使其重复执行,如True将始终评估为True,像这样:

while True: 
    var = input("Hi! I like cheese! Do you like cheese?").lower() # <-- You had missed parentheses here   
    if var == "yes": 
     print("That's awesome!") 

有你的代码虽然另一个问题;您还没有通过在括号后面加上lower

+1

这会如何让程序自行重启 – redFIVE

+0

@redFIVE它会反复运行,而不必按F5一次又一次地用多个输入测试它。这就是我对问题的解释。 –

+0

@redFIVE:你读过这个问题还是只有标题? –

0

我在我的Mac上使用终端重新启动一些我的Python脚本与下面的函数。

import subprocess 
def run_again(cmd): 
    subprocess.call(["bash", "-c", "source ~/.profile; " + cmd]) 

注意:不要忘记“配置文件”后面的空格字符。或者该功能可能会失败!

然后在我的脚本的底部重新启动:

if some_condition: 
    run_again("python my_script.py %s" % my_new_arguments) 

有关奶酪脚本原题:

if var != 'yes': 
    run_again("python my_cheese_script.py")