Problème en python : os.popen

Fermé
hachcoco - 26 mars 2007 à 19:18
 IoNAce - 23 juil. 2007 à 19:34
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, c'est google.com, je ne prend pas trop de risques :p
Par contre, 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
A voir également:

3 réponses

Hello
Je sais que la reponse vient apres quelques mois mais j'ai trouve ton script interessant aussi je l'ai corrige pour qu'il fonctionne a peu pres correctement. J'espere que tu as pu resoudre ton probleme depuis ;-)

PS : la machine que j'ai utilise pour coder est sous Windows XP. Le programme PING a des params differents, c'est donc l'option -n que j'ai utilise pour n'envoyer qu'un seul ping (a toi de modifier pour que cela fonctionne sous nux)
import os, re

def testConnectionNet() :
	lPing = os.popen('ping google.fr -n 1','r')
	sLigne = lPing.read()
	lResult = re.search('(perdus = 0)',sLigne)
	try:
		if ( len(lResult.groups(0)) == 1 ):
			return 'Ok'
	except:
		pass
	
	return None

print 'Connexion internet :', testConnectionNet()


A note egalement que PING est en francais sous Windows, il faudra changer le critere de recherche par l'equivalent en anglais (lost = 0 je suppose, a verifier)

@++
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
22 juil. 2007 à 17:55
Je recommanderais d'utiliser le module subprocess plutôt que popen.
Il permet un meillieur contrôle.

Exemple: https://sebsauvage.net/python/snyppets/index.html#capture_output
0
Je connais pas, j'ai utilise les bases du script que j'ai vu pour l'amélioration. En tout cas merci du tuyau je testerai ça dès que je pourrais ;-)
0