Relance d'un script

Bonjour,
j’ai parfois besoin de relancer un script python (environnement virtuel). J’ai un bouton pour le faire avec la fonction suivante d’associée:

def rel():
	fen.quit()
	os.system("chemin_python"+__file__)

Y-a-t-il un moyen plus adéquat pour réaliser cela ?
Merci

Salut,

Je ne sais pas s’il y a vraiment une manière propre de le faire parce que ça me paraît être un cas d’usage assez sale, j’aurais tendance à faire en sorte de recharger les bons modules et laisser la boucle principale du programme tourner pour actualiser ce qui doit l’être.

Quoi qu’il en soit si je devais effectivement faire en sorte que le programme se relance de lui-même, je me tournerais plutôt vers le module subprocess pour instancier l’exécutable et j’utiliserais sys.executable / sys.argv pour ne pas avoir à entrer de chemin en dur ni dépendre du fichier courant :

import subprocess
import sys
import tkinter
import uuid


root = tkinter.Tk()


def relaunch():
    root.quit()
    subprocess.Popen([sys.executable, *sys.argv])


label = tkinter.Label(root, text=f"window {uuid.uuid4()}")
label.pack()
button = tkinter.Button(root, text="test", command=relaunch)
button.pack()

root.mainloop()

Je rebondis sur la réponse d’@entwanne

Pourquoi ? Ton besoin ressemble à un problème XY.

1 « J'aime »

Bonjour @entwanne,
je comprends que ma solution n’est pas top, mais je fais avec mes petits moyens techniques. Je vais étudier ta proposition et essayer de faire en sorte de ne pas avoir besoin de relancer le script, mais c’est plus compliqué pour moi à mettre en oeuvre.
et bonjour @mdk, je ne pensais pas que ma solution était la bonne mais je voulais avoir d’autres options pour essayer de les mettre en oeuvre. Je vais essayer de vous expliquer mes cas de figures pour être plus précis.
A bientôt si vous le voulez bien…