Forum Programmation.python Lancer une commande shell sous python?

Posté par  .
Étiquettes : aucune
0
30
mar.
2005
Bonjour,
J'aimerais pouvoir dans un script python lancer un programme shell en font de tache ou récupérer le résultat de la commande.
par exemple j'aimerais pouvoir récupérer de résultat d'un "ls" ou plus exactement pour ceux qui connaisse récupérer ce que me renverrais "radvdump".
Voila je ne sais pas trop si c possible et je vous remercie d'avance pour toute l'aide que vous pourrai m'apporter.

P.S: Je suis nouvel utilisateur de Python j'espère que ma question n'est pas trop bête. Je me suis déjà fait, en plus de recherches sur le net, un tutoriel de 300 pages mais j'ai rien trouvé sur le sujet.
  • # re

    Posté par  (site web personnel) . Évalué à 2.

    Rien de plus simple :)

    import commands
    u=commands.getoutput('commande')

    et dans u tu as la string du retour de la commande.

    En esperant t'avoir aidé :)
    • [^] # Re: re

      Posté par  . Évalué à 2.

      tant qu'a faire pourquoi ne pas avoir, et le retour de la commande, et le statut ?

      import commands
      status,output = commands.getstatusoutput(cmd)
  • # os.popen

    Posté par  . Évalué à 2.

    os.popen(cmd) renvoie un descripteur de fichier dans lequel tu as le résultat de la commande.
  • # Merci

    Posté par  . Évalué à 1.

    Merci c'est exactement ce que je recherchais.
    J'ai juste encore un problème radvdump est un programme qui écoute sans jamais s'arrêter est il possible de l'arrêter prématurément histoire d'avoir les info qu'il donne après un certain temps ou mieux de l'ecouter alors qu'il tourne.
    • [^] # Re: Merci

      Posté par  . Évalué à 1.

      ben os.popen(cmd) te retourne un descripteur de fichier donc tu peux le lire ligne par ligne et tout ça

      par contre pour arrêter le programme au bout d'un certain temps ça risque de compliquer les choses
  • # re

    Posté par  (site web personnel) . Évalué à 1.

    Mettre lexecution du programme dans une thread et la kill apres ?
    • [^] # Re: re

      Posté par  . Évalué à 0.

      Et bien ma dernière idée, fait un peu magouille:
      elle consiste à renvoyer les sorties du programme radvdump vers l'entrée du programme python de tel manière à pouvoir les traiter au fur et à mesure.
      en le lançant comme ceci :

      radvdump|MonProgPython

      Vous en pensez quoi? Est-ce qu'il s'agit d'une aberration ou d'une solution envisageable?
      • [^] # Re: idée

        Posté par  . Évalué à 2.

        Ca marcherait, mais c'est dommage. Si tu as accès à Python 2.4, le module subprocess et en particulier la classe Popen est un vrai bonheur à utiliser.

        Sinon fouille du côté de popen2/popen3, ce que tu demandes est faisable (par exemple si le programme est bien fait si tu fermes stdin il doit s'arrêter).

        --
        Thomas

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.