[RESOLU] Faire interpréter un argument en Python

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

[RESOLU] Faire interpréter un argument en Python

Message par domi » jeu. 26 févr. 2015 20:38

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.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

mike913
Raspinaute
Messages : 247
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: Faire interpréter un argument en Python

Message par mike913 » jeu. 26 févr. 2015 23:14

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
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Faire interpréter un argument en Python

Message par domi » ven. 27 févr. 2015 08:50

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.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Faire interpréter un argument en Python

Message par Manfraid » ven. 27 févr. 2015 09:09

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)
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Faire interpréter un argument en Python

Message par domi » ven. 27 févr. 2015 11:06

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.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Faire interpréter un argument en Python

Message par Manfraid » ven. 27 févr. 2015 12:09

Il ne faut pas chercher compliquer dès fois
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Faire interpréter un argument en Python

Message par vague nerd » ven. 27 févr. 2015 12:44

Je sens que rpidroid va faire un pas en avant !
Cdt.
Cordialement,

Vague Nerd

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Faire interpréter un argument en Python

Message par domi » ven. 27 févr. 2015 14:33

vague nerd a écrit :Je sens que rpidroid va faire un pas en avant !
Cdt.
:lol: :lol: :lol: :lol:
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Faire interpréter un argument en Python

Message par domi » ven. 27 févr. 2015 17:39

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:
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Faire interpréter un argument en Python

Message par vague nerd » ven. 27 févr. 2015 18:37

Si vous estimez que votre problème est résolu, merci d'ajouter [RESOLU] au début du... :lol:
Cordialement,

Vague Nerd

Répondre

Retourner vers « Python »