IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

RE-initialisation programme (redemarrage) [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 25
    Points : 16
    Points
    16
    Par défaut RE-initialisation programme (redemarrage)
    Bonjour a tous,

    J'ai un programme sous globalement la forme ci-dessous. Je souhaite lorsque le timer expire relancer le programme au debut. J'ai testé cette solution mais lorsque le def re-demarrage est appelé la commande os.execv semble ne s'execute pas et bloque l'exexution du programme.( je ne peut pas sortir).
    D'autre part, si le timer intervient alors que je suis toujours dans le def demarrage() et que je relance donc ce meme programme cela ne pose t-il pas un probleme ?.est-ce que le programme en cours est kill ?.

    Globalement l'idee est de lancer un timer qui a expiration meme si le programme initial n'est pas terminer relance ce meme programme.

    Merci d'avance pour votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import serial
    import threading
    import sys
    import os
     
     
    def demarrage():
     
       blablabla.....
       blablabla.....
       blablabla.....
       re-demarrage()
     
    def re-demarrage():
     
        os.execv(sys.executable, [sys.executable] +  ["monfichier.py"])  
     
    # programme #
    t = threading.Timer(5, re-demarrage)
    demarrage()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Citation Envoyé par danardui Voir le message
    D'autre part, si le timer intervient alors que je suis toujours dans le def demarrage() et que je relance donc ce meme programme cela ne pose t-il pas un probleme ?.est-ce que le programme en cours est kill ?.
    L'arrêt abrupt du programme courant peut poser quelques problèmes mais ils sont mentionnés dans le mode d'emploi des fonctions exec*.
    Après, votre soucis est peut être d'apprendre à vous servir d'une fonctionnalité que vous ne maîtrisez pas bien. Pour çà, il ne faut essayer de comprendre avec de petits exemples qui s'approchent du cas d'utilisation que vous voulez réaliser.
    Par exemple, vous pourriez commencer par écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import os, sys, time
    from threading import Timer
     
    def restart():
        os.execv(sys.executable, [sys.executable, __file__,])
     
    if __name__ == '__main__':
     
        t = Timer(1, restart)
        t.start()
     
        for x in range(10):
            print (x)
            time.sleep(0.2)
    Puis le faire évoluer un peu pour répondre à vos questions.
    La première chose que je ferais serait passer une variable "retry" d'une activation à l'autre pour que çà puisse s'arrêter proprement.
    Après pour une question du genre:
    Citation Envoyé par danardui Voir le message
    est-ce que le programme en cours est kill ?.
    vous pourriez ajouter l'affichage du pid courant et regarder s'il disparaît côté système (en allongeant éventuellement le délai ou en passant ce pid en paramètre et en utilisant os.waitpid).

    Une fois confiant sur la maîtrise de l'engin, vous pourrez penser à l'intégrer dans votre code.

    - W

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Bonjour wiztricks,
    et merci pour votre reponse rapide.

    dans la ligne os.execv(sys.executable, [sys.executable, __file__,]) je la laisse telle quelle ou je remplace _file_ par le nom de mon fichier ( test_restart3.py) ?.

    Lorsque je lance votre script dans mon Thonny idle le coptage se fait jusqu'a 4 puis s'arrete ,la ligne os.execv(sys.executable, [sys.executable, __file__,]) ne semble pas s'executer et je reste en run permanent . Precision je suis en python 3.2.

    Ai je oublié qq chose ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Citation Envoyé par danardui Voir le message
    dans la ligne os.execv(sys.executable, [sys.executable, __file__,]) je la laisse telle quelle ou je remplace _file_ par le nom de mon fichier ( test_restart3.py) ?.
    çà serait mieux de faire une recherche sur Internet avec les mots clefs
    python __file__
    pour apprendre ce dont il s'agit.

    Citation Envoyé par danardui Voir le message
    Lorsque je lance votre script dans mon Thonny idle le coptage se fait jusqu'a 4 puis s'arrete ,la ligne os.execv(sys.executable, [sys.executable, __file__,]) ne semble pas s'executer et je reste en run permanent . Precision je suis en python 3.2.
    Un IDE comme Idle sert à écrire les programmes et éventuellement à les lancer pour les mettre au point... Et pour arriver faire çà, l'IDE doit pouvoir interagir normalement avec le programme en question. Donc lorsque le comportement lancé depuis l'IDE devient n'importe quoi, il faut le lancer normalement (ouvrir un terminal et taper "python3 monscript.py") pour vérifier.

    - W

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Ok effectivement quand je lance par la console ca fonctionne . Merci pour ces precisions . J'ai encore beaucoup a apprendre sur Pyhton. Le sexagénaire que je suis a besoin de temps !!!.

    En plus je me suis lance dans le developpment d'une appli pour gerer des effets dans des escapes games pour mon beau fils et je suis pris par le temps pour realiser tous cela.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Initialisation d'un programme en python 2.6
    Par frisou65 dans le forum Général Python
    Réponses: 6
    Dernier message: 04/10/2011, 17h16
  2. Update et redemarrage automatique d'un programme
    Par funtix dans le forum Windows
    Réponses: 2
    Dernier message: 09/10/2007, 22h06
  3. initialisation programme multilangue
    Par holdup37 dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/05/2007, 17h06
  4. Réponses: 2
    Dernier message: 30/01/2007, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo