Les Allergies
Alimentaires
Posez votre question Signaler

Problème en python : os.popen

hachcoco - Dernière réponse le 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
Lire la suite 

Problème en python : os.popen »

3 réponses
Réponse
+0
moins plus
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)

@++
Ajouter un commentaire
Réponse
+0
moins plus
Je recommanderais d'utiliser le module subprocess plutôt que popen.
Il permet un meillieur contrôle.

Exemple: http://sebsauvage.net/python/snyppets/index.html#capture_output
Ajouter un commentaire
Réponse
+0
moins plus
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 ;-)
Ajouter un commentaire
Ce document intitulé « problème en python : os.popen » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?