2014-05-14 6 views
-2

Je suis en train de faire une déclaration de définition qui utilise os.system (ping) avec une variable, et il ne veut pas prendre la variable:Python: l'argument os.system (ping) ne fonctionne pas?

import os 

def myping(myip): 
    print(myip) 
    ip1 = os.system("ping -c 1 myip") 
    print(ip1) 
myping("127.0.0.1") 

Cela renvoie un code de 512 (échec, plutôt que un 0, ce qui est un succès), puis "ping: hôte inconnu myip". Selon la façon dont je formate le myip dans l'instruction os.system, je peux aussi obtenir un 256 avec une autre erreur. J'ai essayé différentes manières de le mettre en forme, y compris des guillemets, des parenthèses, des signes de pourcentage et autres, et je ne suis pas sûr de ce que je fais mal.

Je peux dire que je fais croire que je veux rechercher myip (chaîne littérale). Quelle syntaxe ai-je tort ici? Merci. A propos, print (myip) dans la déclaration def me donne 127.0.0.1.

+0

'IP1 = os.system ("ping -c 1 {}". format (myip)) ' – dano

+0

C'est tellement drôle. Je suis revenu pour examiner cette question deux ans plus tard parce qu'il y avait quelques milliers de vues, et tout de suite j'ai pu voir ce qui n'allait pas. Expérience! Merci pour l'aide les gars! J'en avais besoin! – spideyclick

Répondre

1

Vous voulez probablement obtenir la valeur de myip dans l'argument os.system:

ip1 = os.system('ping -c 1 {}'.format(myip)) 

ou (style ancien, dépréciée en python 3.1):

ip1 = os.system("ping -c 1 %s" % myip) 
+0

Vous devriez privilégier la deuxième approche. L'interpolation de chaîne de style '% s' est déconseillée en faveur de' .format', comme indiqué dans la documentation Python ici: https://docs.python.org/2/library/stdtypes.html#str.format – dano

+0

Sous Windows 7 et Python 3.3 le code retour est 1 sans tenir compte de si l'adresse IP est joignable ou non. – user3286261

+0

Merci beaucoup - cela a fonctionné! (spécifiquement, la deuxième méthode.) – spideyclick