March 26, 200718 yr Bonjour ! J'ai un problème avec un script que j'ai fait en python : Comme il doit aller chercher des infos sur le net j'ai fais une fonction pour tester la présence d'une connection, ce qui est indispensable chez moi :-( La voila : def testConnectionNet() : ping=os.popen("ping 72.14.253.104 -c 1","r") lignes=ping.readlines() for ligne in lignes : print ligne net = re.search("(1 received)",ligne) if net : print "verification de la presence d'une connection internet...OK" ping = "" return 1 ping = "" print "verification de la presence d'une connection internet...ERROR" return 0 l'addresse ip , c'est google.com, je ne prend pas trop de risques Donc, il fait le test à chaque erreur qu'il trouve, Et au bout d'un certian temps il me sort : ping=os.popen("ping 72.14.253.104 -c 1","r") OSError: [Errno 24] Too many open files Voila, j'aimerais donc savoir si je fais quelque chose mal (le test de la présence d'internet est indispensable dans ce cas là). Sinon avez vous une autre méthode pour tester ça ? Merci beaucoups et bonne journée ! PS : je suis sous linux
March 27, 200718 yr Salut, Je ne m'y connais pas en Python, mais vu ton erreur j'en déduis que tu ne refermes jamais ta connexion faite via: ping=os.popen("ping 72.14.253.104 -c 1","r") Car même si tu vides ping, ca ne ferme pas pour autant la connexion, non? donc un os.close (enfin je suppose, car je ne connais pas le nom des méthodes) devrait être nécessaire quelque part
April 4, 200718 yr oublie pas le -w pour le timeout import os,sre print sre.findall("1 received",os.popen("ping -c1 -w1 72.14.253.104 ","r").read()) and "OK" or "ERROR"
April 5, 200718 yr Oula tu m'as filé le doute :) Donc apres vérifications la vm python ferme bien son fd après le read() strace python -c 'import os,sre;print sre.findall("1 received",os.popen("ping -c1 -w1 72.14.253.104 ","r").read()) and "OK" or "ERROR"' 2>&1|less [...] clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7d496f8) = 11197 close(4) = 0 fstat64(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 fstat64(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 _llseek(3, 0, 0xbfe242d0, SEEK_CUR) = -1 ESPIPE (Illegal seek) fstat64(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c84000 read(3, "PING 72.14.253.104 (72.14.253.10"..., 1024) = 272 --- SIGCHLD (Child exited) @ 0 (0) --- read(3, "", 1024) = 0 close(3) [...]
May 11, 200718 yr Author Merci à tous pour vos réponses ! Alors j'ai essayé la solution de savory après avoir essayé toute les solutions de .close() possible, et il me re-sort le même genre de message d'erreur ! while testConnectionNet()==0 : File "projet.py", line 751, in testConnectionNet if (sre.findall("1 received",os.popen("ping -c1 -w1 72.14.253.104 ","r").read()) and "OK" or "ERROR")=="OK" : OSError: [Errno 24] Too many open files Je comprend plus trop ce qui se passe ...
May 17, 200718 yr Ça veut juste dire que tu fais trop de popen à la suite, tu dois avoir un gros probleme de sémantique dans ton programme ^^" que fait testConnectionNet() ? Je pense que tu dois faire une boucle de popen et que l'os ne peut plus assurer les exec au bout d'un moment, tu devrais attendre le résultat de ton popen avant d'en ouvrir un autre non ?
May 17, 200718 yr Oula tu m'as filé le doute :)Donc apres vérifications la vm python ferme bien son fd après le read() strace python -c 'import os,sre;print sre.findall("1 received",os.popen("ping -c1 -w1 72.14.253.104 ","r").read()) and "OK" or "ERROR"' 2>&1|less [...] clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7d496f8) = 11197 close(4) = 0 fstat64(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 fstat64(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 _llseek(3, 0, 0xbfe242d0, SEEK_CUR) = -1 ESPIPE (Illegal seek) fstat64(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c84000 read(3, "PING 72.14.253.104 (72.14.253.10"..., 1024) = 272 --- SIGCHLD (Child exited) @ 0 (0) --- read(3, "", 1024) = 0 close(3) [...] Tu le vois comment ? C'est la terminaison du processus fils qui suit le read ? ( SIGCHLD )
Archived
This topic is now archived and is closed to further replies.