Saltar al contenido

Cómo hacer que un programa de Python se reinicie automáticamente

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 usando f.flush() o os.fsync(fd) antes de llamar a un exec*()
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

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *