How do you make a python program automatically restart itself? So let's say there is a really simple program like:
var = input("Hi! I like cheese! Do you like cheese?").lower() if var == "yes": print("That's awesome!")
Now, in a Python Shell, you would have to press either the Run button and then 'Run Module (F5)' or just the F5 key on your keyboard. That is the first time you run it. When the program ended, you would go back to your Cheese.py
file and then press F5 to run the program again.
Everybody with me here? OK, so my question is, how do you make the program restart itself automatically without you having to manually do it?
Now, in a Python Shell, you would have to press either the Run button and then 'Run Module (F5)' or just the F5 key on your keyboard. That is the first time you run it. When the program ended, you would go back to your Cheese.py file and then press F5 to run the program again.
sleep() Function To Run Script repeatedly. So, if you do not want to use the above code and just want to run your script repeatedly then you can use the time. sleep() function. This function allows your script to keep running after sleeping for a certain amount of time.
It depends on what you mean by "restart itself." If you just want to continuously execute the same code, you can wrap it in a function, then call it from within a while True
loop, such as:
>>> 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!
If you want to actually restart the script you can execute the script again, replacing the current process with the new one by doing the following:
#! /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.
This will continuously re-run the script, providing the command line arguments from the current version to the new version. A more detailed discussion of this method can be found in the post "Restarting a Python Script Within Itself" by Petr Zemek.
One item that this article notes is:
If you use the solution above, please bear in mind that the
exec*()
functions cause the current process to be replaced immediately, without flushing opened file objects. Therefore, if you have any opened files at the time of restarting the script, you should flush them usingf.flush()
oros.fsync(fd)
before calling anexec*()
function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With