OVH Cloud OVH Cloud

Socket PyW

14 réponses
Avatar
Yves Lange
Hello,
c'est denouveau moi... ^^

Bon j'ai fait mon application python client/serveur en TCP/IP et ça
marche très bien. Mais je voulais cacher le client car la fenêtre est
très gênante quand je travail surtout quand je transfert 100mo ;).

Le problème est que quand je passe en pyw (sans console) et bien
l'application reste 3 à 4secondes et se referme automatiquement.

Le problème c'est que je ne peux pas voir le message d'erreur et que sur
le serveur (comme je n'ai pas mis de try et except) un message d'erreur
apparaît: (..., "Software caused connection abort"). Comment faire pour
que pyw ne s'arrête pas ? Y a-t-il une limite avec l'utilisation de
python sans console à propos des sockets ?

Merci

4 réponses

1 2
Avatar
jean-michel bain-cornu
Bonjour,
J'utilise Eclipse comme environnement de développement avec pydev comme
plugin.
Quand tu exécutes l'appli, elle est lancée dans un nouveau processus.
Avec la solution 3, Eclipse récupère toutes les traces et les affiche
dans sa console. Dans le cas d'une exception, tu peux cliquer sur la
trace pour t'amener directement sur la ligne qui a généré l'erreur. Et
si ton appli est plantée (ou pas), tu peux tuer le processus directement
depuis éclipse.


Pour info, le même comportement est obtenu avec Boa, avec un debugger
disponible en plus.

Avatar
Yves Lange
Le problème c'est que je ne peux pas voir le message d'erreur et que
sur
le serveur (comme je n'ai pas mis de try et except) un message d'erreur
apparaît: (..., "Software caused connection abort"). Comment faire pour
que pyw ne s'arrête pas ? Y a-t-il une limite avec l'utilisation de
python sans console à propos des sockets ?

Merci
utiliser try/except serait une bonne idée.



Et logging pour enregistrer l'erreur ;-) !

Par parenthèse, quand on génère une application utilisant wx avec

py2exe, les éventuels messages sont enregistrés automatiquement dans un
fichier nom_du_point_exe.log.
C'est pratique une fois que l'application est déployée si l'on a pas
prévu d'autre moyen d'enregistrer les erreurs.

Par contre je ne sais pas si ça vient de py2exe ou de wx...

A+
jm
Merci pour toutes vos réponses. Ma solution a été d'enlever les parties

print répétitif (dans la boucle while). Depuis, plus aucun problème. Je
pense que Python limite les boucles avec des prints pour empêcher qu'un
application dévore l'intégralité des ressources de la machine... enfin
ce n'est qu'une hypothèse.

Merci encore.

PS: je trouve que try et except n'est pas vraiment la solution car elle
ne me permettront pas de comprendre mon erreur ^^




Avatar
NicolasP
NicolasP wrote:

Pas avec wxPython. En tout cas, j'ai jamais eu de problèmes. Sauf si tu
édites ton appli avec IDLE. IDLE lance ton appli dans le même contexte que
l'éditeur. Du coup, si tu plantes ton appli, tu plantes IDLE. Et une
boucle infinie, c'est comme planter l'appli.


En fait ça ne plantait pas l'appli mais semblait avoir un impact sur son
dialogue avec une carte à puce

Il faut toujours savoir ce que l'on fait. Surtout quand on debug une application. Il ne faut pas perdre de vue qu'un print est lent, voire très lent. La notion de lenteur est très subjective et dépend du contexte.

Il est fort probable que le dialogue avec une carte à puce ne s'accommode pas de lenteurs dans le protocole. On peut penser que pour des raisons de sécurité, la carte à puce coupe la communication si le PC n'a pas répondu dans un temps donné (réponse trop lente = tentative de piratage).
Donc méfiance sur des analyses trop rapides du genre "limite les boucles avec des prints pour empêcher qu'un application dévore l'intégralité des ressources de la machine" ce qui n'est, pour ma part, pas exact.

Nicolas


Avatar
hg
NicolasP wrote:

NicolasP wrote:

Pas avec wxPython. En tout cas, j'ai jamais eu de problèmes. Sauf si tu
édites ton appli avec IDLE. IDLE lance ton appli dans le même contexte
que l'éditeur. Du coup, si tu plantes ton appli, tu plantes IDLE. Et une
boucle infinie, c'est comme planter l'appli.


En fait ça ne plantait pas l'appli mais semblait avoir un impact sur son
dialogue avec une carte à puce

Il faut toujours savoir ce que l'on fait. Surtout quand on debug une

application. Il ne faut pas perdre de vue qu'un print est lent, voire très
lent. La notion de lenteur est très subjective et dépend du contexte. Il
est fort probable que le dialogue avec une carte à puce ne s'accommode pas
de lenteurs dans le protocole. On peut penser que pour des raisons de
sécurité, la carte à puce coupe la communication si le PC n'a pas répondu
dans un temps donné (réponse trop lente = tentative de piratage). Donc
méfiance sur des analyses trop rapides du genre "limite les boucles avec
des prints pour empêcher qu'un application dévore l'intégralité des
ressources de la machine" ce qui n'est, pour ma part, pas exact.

Nicolas


Pas possible: les appels aux cartes sont synchrones et l'appli en question
n'était pas multi-thread. Mais je suis d'accord '...l faut toujours savoir
ce que l'on fait ...' ;-)

hg



1 2