2016-03-15 1134 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")