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 :

symbole tête de mort rouge à la place du carré d'arrêt du script Pycharm community


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti dev Python
    Inscrit en
    Août 2021
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti dev Python

    Informations forums :
    Inscription : Août 2021
    Messages : 69
    Par défaut symbole tête de mort rouge à la place du carré d'arrêt du script Pycharm community
    Bonjour,
    Lors de l'arrêt des scripts à certains moments le carré d'arrêt est remplacé par une tête de mort rouge; à partir de ce moment le programme ne peut plus être arrêté autrement que par une intervention manuelle (en cliquant sur la tête de mort).
    J'aimerais une explication de pourquoi ce phénomène et comment l'arrêter
    je vous mets ci-dessous un screen de la dite tête de mort.

    Nom : tete de mort .png
Affichages : 401
Taille : 584 octets
    tête de mort

    Nom : carre classique.png
Affichages : 387
Taille : 247 octets
    carré classique

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 191
    Par défaut
    Hello,
    d'après ce que j'ai compris c'est qu'il y a un processus relatif à l'exécution du programme python qui ne veut pas s'arrêter. Il faut passer alors pour le gestionnaire de tâches pour réaliser cette opération. Cela peut se produire lorsque le programme python fait appel à des processus extérieurs. Exemple Chromedriver.exe pour le selenium python.
    Ami calmant, J.P

  3. #3
    Membre confirmé
    Homme Profil pro
    Apprenti dev Python
    Inscrit en
    Août 2021
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti dev Python

    Informations forums :
    Inscription : Août 2021
    Messages : 69
    Par défaut
    Merci de votre réponse ;
    Dans mon programme j'utilise des sockets et des threads le problème doit venir d'un des deux
    Je n'ai pas compris comment résoudre le problème...

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 191
    Par défaut
    Hello,
    peut-être ici une piste pour arrêter un thread qui contient une gestion de socket :
    is-there-any-way-to-kill-a-thread

    Ami calmant, J.P

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 690
    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 690
    Par défaut
    Citation Envoyé par dymon2021 Voir le message
    Je n'ai pas compris comment résoudre le problème...
    Si ça affiche une tête de mort, c'est que l'IDE n'est plus dans un état "normal"... ce qui peut arriver mais le soucis vient essentiellement du code que vous lui demandez d'exécuter. S'il fonctionne correctement en dehors de l'IDE, c'est peut être un problème côté IDE, sinon, la mise au point d'un programme, c'est juste le boulot de base du programmeur (et vous n'avez pas posté de code pour demander de l'aide pour cela).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Homme Profil pro
    Apprenti dev Python
    Inscrit en
    Août 2021
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti dev Python

    Informations forums :
    Inscription : Août 2021
    Messages : 69
    Par défaut
    Excusez moi pour le retard.

    Voici le code qui provoque cette erreur
    Étant donné qu'il s'agit d'un système réseau je vous mets les deux codes (serveur et client) même si seulement le code serveur pose un problème

    SERVEUR [Problème]:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    import socket, sys, threading
    from time import sleep
     
    HOST = ""
    PORT = 55555
     
    class ThreadClient(threading.Thread):
        """gérer connexion client"""
        def __init__(self, conn):
            threading.Thread.__init__(self)
            self.connexion2 = conn
     
        def run(self):
            #global dictionnairePseudo
            #Dialogue vec le client
            nom = self.getName()
            while True:
                try:
                    msgClient = self.connexion2.recv(1024).decode()
                except socket.error:
                    break
                if msgClient.lower() == "fin":
                    break
     
                msgClient2 = msgClient.split("&#&#")
                if msgClient2[0] == "Pseudo":
                    if msgClient2[1].lower() in Utilisateurbanni:
                        Banni(msgClient2[1])
                        return None
     
                    else:
                        dictionnairePseudo[nom] = msgClient2[1]
                        #print("connexion: " + str(len(conn_client)) + "; " + str(conn_client))
                        print(f"\033[0;36mClient {dictionnairePseudo[nom]} ({nom}) connecté avec l'adresse IP {adresse[0]} et le port {adresse[1]}\n {len(conn_client)} connectés\033[0m")
                        #print()
     
                        message = "\033[0;31mServeur\033[0m > Vous êtes connecté... Vous pouvez désormais envoyer des messages"
                        connexion.send(message.encode())
                else:
                    msg = dictionnairePseudo[nom] + " > " + msgClient
                    print(msg)
                    #envoyer le message à tout les autres clients
                    for cle in conn_client:
                        if cle != nom:
                            conn_client[cle].send(msg.encode())
     
            #femeture connexion
            del conn_client[nom]
            #print("déconnexion: " + str(len(conn_client)) + "; " + str(conn_client))
            print(f"""\033[0;31Client "{dictionnairePseudo[nom]}" ({nom}) déconnecté\n {len(conn_client)} connectés\033[0m""")
            #print()
            del dictionnairePseudo[nom]
            self.connexion2.close()
     
    def Banni(Pseudo= ""):
        if Pseudo:
            Pseudo = " (" + Pseudo + ")"
     
        try:
            connexion.send("\033[0;31mServeur > Vous avez été banni, vous ne pouvez pas vous connecter !\033[0m".encode())
        except socket.error:
            pass
        sleep(0.5)
        print(f"\033[0;31mle Client {adresse[0] + Pseudo} a tenté de se connecter alors qu'il est banni\033[0m")
        connexion.close()
     
    #Initialisation serveur
    connexionPrincipale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        connexionPrincipale.bind((HOST,PORT))
    except socket.error:
        print("\033[0;31mLa liaison a échoué...\033[0m")
        sys.exit()
     
    print("Serveur prêt, en attente de requêtes...")
    connexionPrincipale.listen(1)
     
    #attente de connexion
    conn_client = {}
    dictionnairePseudo = {}
    Utilisateurbanni = []
    Utilisateurbanni = ["192.168.1.10","test",test2"]
    while True:
        connexion, adresse = connexionPrincipale.accept()
     
        if adresse[0] in Utilisateurbanni:
            Banni()
     
        else:
     
            thread = ThreadClient(connexion)
            # Mémorise la connexion
            id = thread.getName()
            #print(id)
            conn_client[id] = connexion
            #demarre les échanges
            thread.start()
    CLIENT [Pour tester]:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    import socket, sys, threading, time
     
    HOST = 'localhost'
    PORT = 55555
     
    class ThreadReception(threading.Thread):
        """reception des messages"""
        def __init__(self,conn):
            threading.Thread.__init__(self)
            self.connexion = conn
     
        def run(self):
            global entre
            while True:
                try:
                    msg_recu = self.connexion.recv(1024).decode()
                except socket.error:
                    break
                if entre == True:
                    entre = 0
                    print()
                print(msg_recu)
                if msg_recu == "" or msg_recu.lower() == "fin":
                    break
     
            thEmission.join(timeout=0)
            print("\033[0;31mConnexion interrompue.\033[0m")
            self.connexion.close()
     
    class ThreadEmission(threading.Thread):
        """émission des messages"""
        def __init__(self,conn):
            threading.Thread.__init__(self)
            self.connexion = conn
     
        def run(self):
            global entre
            while True:
                try:
                    entre = 1
                    msg_envoye = input("Votre message: ")
                    entre = 0
                    self.connexion.send(msg_envoye.encode())
                except socket.error:
                    break
     
    #Progrmme principal
    entre = 1
    Pseudo = input("Saisissez un Pseudo: ")
    connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        connexion.connect((HOST, PORT))
    except socket.error:
        print(f"\033[0;31mLa connexion au serveur {HOST} sur le port {PORT} a échoué !\033[0m")
        input()
        sys.exit()
    print("\033[0;36mConnexion établie auprès du serveur.\033[0m")
     
    try:
        connexion.send(("Pseudo&#&#" + Pseudo).encode())
    except socket.error:
        None
    #sleep(0.5)
    #lancement thread pour gérer simultanément l'émission et la réception des messages.
    thReception = ThreadReception(connexion)
    thEmission = ThreadEmission(connexion)
    thReception.start()
    thEmission.start()
    PS: Si le code n'est pas compréhensible n'hésitez pas me demander

  7. #7
    Membre très actif
    Avatar de toumic2.0
    Homme Profil pro
    Gammologie (Étudie, code, publie des gammes)
    Inscrit en
    Janvier 2021
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Gammologie (Étudie, code, publie des gammes)
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2021
    Messages : 167

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 690
    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 690
    Par défaut
    Salut,

    Citation Envoyé par dymon2021 Voir le message
    même si seulement le code serveur pose un problème
    Est ce que le code se comporte "correctement" lorsqu'il est lancé "normalement" sinon quel(s) problème(s) constater en faisant quoi?.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 191
    Par défaut
    Hello,
    Citation Envoyé par dymon2021 Voir le message
    Lors de l'arrêt des scripts à certains moments le carré d'arrêt est remplacé par une tête de mort rouge; à partir de ce moment le programme ne peut plus être arrêté autrement que par une intervention manuelle (en cliquant sur la tête de mort).
    bon j'ai trouvé l'explication de la tête de mort rouge dans pycharm

    Nom : stopPycharm.PNG
Affichages : 331
Taille : 33,1 Ko

    Dans ton programme serveur un signal d'interruption ne suffit pas pour interrompre ton programme car ton "accept" sur le connecteur réseau est de type bloquant . Pour pouvoir interrompre le programme par un signal d'interruption, il faut remplacer le "accept" par l'équivalent en non bloquant (avec "select" ou "poll" par exemple).

    Ami calmant, J.P

Discussions similaires

  1. Ecran rouge à la place du noir
    Par Hyoga dans le forum Périphériques
    Réponses: 1
    Dernier message: 05/11/2013, 17h10
  2. [SP-2010] Croix rouges à la place des images, dans certains cas.
    Par sebfreu dans le forum SharePoint
    Réponses: 5
    Dernier message: 26/03/2012, 12h01
  3. Réponses: 6
    Dernier message: 30/04/2009, 11h18
  4. [MySQL] Problème symbole bizarre à la place de tous les accents
    Par calitom dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/02/2007, 15h11

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