Python : stocker le résultat d'une commande [Résolu]

Fabio - 13 mai 2017 à 11:35 - Dernière réponse :  Fabio
- 15 mai 2017 à 20:26
Bonjour,

J'aimerais pouvoir avoir dans un code python, le résultat d'une commande terminal, pour pouvoir ensuite le stocker dans une variable.
J'avais trouvé sur internet des techniques pour le faire avec le module os mais elles ne semblent pas marcher sur python 3.
Merci de vos réponses par avance.

Afficher la suite 

6 réponses

Répondre au sujet
Felice_ 266 Messages postés mardi 25 avril 2017Date d'inscription 20 juillet 2017 Dernière intervention - 13 mai 2017 à 11:39
0
Utile
Tu veux dire les arguments ?

Tu fais ainsi :
import sys

for arg in sys.argv:
    print(arg)
Commenter la réponse de Felice_
0
Utile
2
Je pense qu'il souhaite pouvoir stocker ce qui est affiché lorsqu'on tape une commande dans un terminal, non pas en stdout, mais en l'affectant à une variable.

Donc je pense qu'il souhaite ceci.

import subprocess

result = subprocess.check_output('TA_COMMANDE')

print('result', result.decode())


Attention toutefois à vérifier le type de la valeur retournée, par exemple avec ls ou encore dir sur linux, c'est un type bytes, d'où le decode.
C'est bien ce que je voulais mais cette commande ne marche pas, ça me dit :
FileNotFoundError: [Errno 2] No such file or directory: 'lsof -i'
(lsof -i est la commande en question).
gudu > Fabio - 15 mai 2017 à 20:13
Il faut utiliser une liste en argument de la m"thode si tu as des options à passer à ta commande.

Donc :
result = subprocess.check_output(['lsof', '-i'])


Oops, j'avais pas vu que _Ritchi_ avait donné la solution :D
Commenter la réponse de gdu
_Ritchi_ 18227 Messages postés samedi 17 mars 2007Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - Modifié par _Ritchi_ le 15/05/2017 à 20:05
0
Utile
Bonjour,

Le script de gdu marche très bien quand la commande n'a pas d'option!
Tu aurais pu creuser un peu le sujet sur la fonction subprocess.check_output() afin d'en connaître la syntaxe à respecter, à savoir:
import subprocess

result = subprocess.check_output(['lsof', '-i'])

print('result', result.decode())


Ritchi
Commenter la réponse de _Ritchi_
0
Utile
Merci ça marche :) !!!
Commenter la réponse de Fabio