Python : stocker le résultat d'une commande

Résolu
Fabio -  
 Fabio -
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.

4 réponses

  1. gdu
     
    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.
    1
    1. Fabio
       
      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).
      0
      1. gudu > Fabio
         
        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
        0
  2. Felice_ Messages postés 271 Statut Membre 11
     
    Tu veux dire les arguments ?

    Tu fais ainsi :
    import sys
    
    for arg in sys.argv:
        print(arg)
    0
  3. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
     
    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
    0