Page 1 sur 2

[RESOLU] Faire interpréter un argument en Python

Posté : jeu. 26 févr. 2015 20:38
par domi
Bonjour à tous,

Je cherche à lancer avec Python une commande que je passe en argument.
Je me débrouille pas mal en Python, mais là j'ai besoin d'un expert ;)

Je m'explique : pour les arguments pas de soucis, voici comment je fais :
Mon script "test.py"

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Import libraries Python
import sys
import psutil
# Execution de la commande passee en argument.
valretour = str(sys.argv[1])
# On retour la valeur.
print (valretour)
Donc aucun soucis, je récupére bien l'argument que je passe en paramètre.

Mon soucis est que je veux utiliser le module "psutil" pour retourner "à la demande" quelques informations système.

Dans le script : J'importe le module, si à la place de mettre " str(sys.argv[1])" je met "psutil.virtual_memory()" cela fonctionne bien, je récupère les infos mémoire.
Mais comme je ne veux pas créer un script par commande "psutil", je souhaite faire un script comme ci-dessus, et en argument je passe la commande.

C'est à dire que je souhaiterai lancer mes commandes comme ceci :

Code : Tout sélectionner

$ test.py psutil.virtual_memory()
ou ?
$ test.py "psutil.virtual_memory()"
idem pour

Code : Tout sélectionner

$ test.py psutil.disk_partitions()
$ test.py psutil.users()
etc...
Voila, si quelqu'un pouvait me dire comment faire pour que l'argument soit interprété dans le script, et non pris comme une chaîne de caractère.

Merci d'avance.

Re: Faire interpréter un argument en Python

Posté : jeu. 26 févr. 2015 23:14
par mike913
Bonjour,

Et comme ceci

Code : Tout sélectionner

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-

    # Import libraries Python
    import sys
    import psutil
    # Execution de la commande passee en argument.
    valretour = str(sys.argv[1])
    # On retour la valeur.
    print (valretour)
	if valretour == 1:
		psutil.virtual_memory()
	elif valretour == 2:
		psutil.disk_partitions()
	elif valretour == 3:
		psutil.users()
en appelant le script : $ test.py 1

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 08:50
par domi
Bonjour et merci de ta réponse.

J'avais bien pensé à cette solution, mais elle est trop lourde et restrictive.

Par exemple un "psutil.virtual_memory()" me retour la totalité des données de la mémoire.

Code : Tout sélectionner

svmem(total=8374149120L, available=1247768576L, percent=85.1, used=8246628352L, free=127520768L, active=3208777728, inactive=1133408256, buffers=342413312L, cached=777834496)
Si je souhaite récupérer par exemple dans cette même commande, uniquement le pourcentage mémoire utilisé, je n'est qu'a faire (donc donner en argument du script) :

Code : Tout sélectionner

psutil.virtual_memory()[2]
la réponse sera "85.1"

Il en est de même pour toutes les valeurs du système.

C'est pourquoi je cherche s'il existe une possibilité de faire interpréter un argument, et récupérer le résultat.

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 09:09
par Manfraid
Salut domi

oui c'est possible avec la fonction eval()
avec ton code cela donnerai

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Import libraries Python
import sys
import psutil
# Execution de la commande passee en argument.
valretour = eval(sys.argv[1])
# On retour la valeur.
print (valretour)
et je ferai comme ceci pour plus de sécurité

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Import libraries Python
import sys
import psutil
# Execution de la commande passee en argument.
try:
    valretour = eval(sys.argv[1])
except:
    valretour = "Erreur"
# On retour la valeur.
print (valretour)

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 11:06
par domi
Merci Manfraid, je test ça ce soir.

Je connaissais "eval()" en PHP, mais il ne m'est pas venu à l'esprit que cela fonctionnerait sous Python.

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 12:09
par Manfraid
Il ne faut pas chercher compliquer dès fois

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 12:44
par vague nerd
Je sens que rpidroid va faire un pas en avant !
Cdt.

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 14:33
par domi
vague nerd a écrit :Je sens que rpidroid va faire un pas en avant !
Cdt.
:lol: :lol: :lol: :lol:

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 17:39
par domi
Re,

@Manfraid : Merci de ton aide, ça fonctionne Nickel. Je cherchais vraiment plus loin que le bout de mon nez :D
@Vague Nerd : je te soupçonne des dons de voyance :lol:

Re: Faire interpréter un argument en Python

Posté : ven. 27 févr. 2015 18:37
par vague nerd
Si vous estimez que votre problème est résolu, merci d'ajouter [RESOLU] au début du... :lol: