Hola, tenemos la solución a lo que estabas buscando, continúa leyendo y la encontrarás aquí.
Solución:
Depende de lo que entiendas por “reiniciar solo”. Si solo desea ejecutar continuamente el mismo código, puede envolverlo en una función y luego llamarlo desde dentro de un while True
bucle, como:
>>> 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!
Si quieres Realmente reinicie el script, puede ejecutar el script nuevamente, reemplazando el proceso actual con el nuevo haciendo lo siguiente:
#! /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.
Esto volverá a ejecutar continuamente el script, proporcionando los argumentos de la línea de comando de la versión actual a la nueva versión. Se puede encontrar una discusión más detallada de este método en la publicación “Reiniciar una secuencia de comandos de Python dentro de sí misma” de Petr Zemek.
Un elemento que señala este artículo es:
Si utiliza la solución anterior, tenga en cuenta que el
exec*()
Las funciones hacen que el proceso actual se reemplace inmediatamente, sin vaciar los objetos de archivo abiertos. Por lo tanto, si tiene archivos abiertos al momento de reiniciar el script, debe vaciarlos usandof.flush()
oos.fsync(fd)
antes de llamar a unexec*()
función.
Uso la terminal en mi Mac para reiniciar algunos de mis scripts de python con la función a continuación.
import subprocess
def run_again(cmd):
subprocess.call(["bash", "-c", "source ~/.profile; " + cmd])
Nota: no olvide el carácter de espacio después de “perfil”; ¡o la función puede fallar silenciosamente!
Luego, en la parte inferior de mi script para reiniciar:
if some_condition:
run_again("python my_script.py %s" % my_new_arguments)
Para la pregunta original sobre el script de queso:
if var != 'yes':
run_again("python my_cheese_script.py")
o puedes probar
$ chmod a+x "name".py
Luego, puede ejecutar el script a través de
$ ./daemon.py
En tal situación, para reiniciar el script, use el siguiente código:
os.execv(__file__, sys.argv)
De lo contrario, cuando ejecute el script a través de
$ python daemon.py
usa este código:
os.execv(sys.executable, ['python'] + sys.argv)
De cualquier manera, no olvides importar el sys module