CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Récupérer sortie d'une commande

IIIIIIIIIIIIIll
IIIIIIIIIIIIIll
Niveau 10
29 mars 2011 à 21:28:31

(Récupérer la sortie d'une commande externe à partir du script ; saleté de limite de caractères pour le titre du post :p) )

Salut,

J'ai décidé de refaire un peu joujou avec Python, et voilà que je tombe sur un problème qui m'était encore jamais arrivé !
En gros, je veux, depuis mon script Python, exécuter un autre script/whatever (pas du Python, celui-là) ; du coup, ok, pas de problème, la faq de python.développez.com me propose os.system qui marche à merveille. :)

Sauf que voilà, ce que je veux exécuter affiche des choses pertinentes ( :noel: ) sur la sortie standard, et ce qui m'intéresse, c'est de récupérer ceci pour l'utiliser par la suite. (Un peu comme si j'utilisais un pipe, quoi)
Du coup, je me dis : facile, on va récupérer ce que retourne os.system dans une variable, c'est sûrement la sortie standard. Je teste, et là POUF, à la place d'une belle chaîne joliment formatée, je reçois un 0 ! :peur: (Si, si, ce que j'ai exécuté a donc bel et bien fonctionné correctement :noel: )

Du coup, voilà ma question : y a-t-il une commande qui permette d'évaluer un programme externe au script, et qui retourne la sortie standard du-dit programme ?
(Et subsidiairement : cette commande arrive-t-elle à détourner temporairement la sortie standard pour que seul mon script arrive à voir la sortie du-dit programme, ici encore à la manière d'un pipe ?)

Merci pour toute réponse ! (Du moins, pour celles qui sont constructives et sympa :gni: )

chris_27
chris_27
Niveau 10
30 mars 2011 à 00:25:18

« y a-t-il une commande qui permette d'évaluer un programme externe au script, et qui retourne la sortie standard du-dit programme ? » :d) je ne pense pas non. Normalement, on fait des pipes unix pour ça (le | du shell).

J'y connais rien en Python, donc je te renvoie bêtement au bout de doc le plus crédible que j'ai croisé : http://docs.python.org/library/pipes.html
(et d'ailleurs, l'interface semble être faite de telle sorte que ça donne tort à ma première remarque).

godrik
godrik
Niveau 30
30 mars 2011 à 00:45:04

mon etudiant a fait ca une fois. je lui demande un extrait de code et je reviens vers toi.

godrik
godrik
Niveau 30
30 mars 2011 à 02:49:15

il dit:

import commands;
x=commands.getoutput('echo 1+2 | bc -l');
print x;

Ca a l'air de marcher. Si la sortie est enorme, ce n'est pas tres approprie et le module subprocess devient plus approprie.

Apres c'est ce qu'il dit, j'y connais rien.

IIIIIIIIIIIIIll
IIIIIIIIIIIIIll
Niveau 10
30 mars 2011 à 13:32:10

Chris_27 :d) J'avais pensé à regarder du côté du module "pipe", mais ça me paraît un peu bordél*que à mettre en place. :-(

godrik :d) Ah ouais, pas c*n. :gni:

Merci !

chris_27
chris_27
Niveau 10
30 mars 2011 à 15:43:29

Ça parraît bordélique, mais au moins tu as une chance que ça marche vraiment comme un pipe. La solution de godrik est plus simple, mais si la sortie de ta commande est énorme, tu as de grandes chances de perdre un max de mémoire. :(

godrik
godrik
Niveau 30
30 mars 2011 à 15:49:19

le module subprocess dispose d'une fonction qui cree permet d'utiliser des pipe pour stdin et stdout.

_skip
_skip
Niveau 10
30 mars 2011 à 16:26:43

Et c'est pas possible en python de lire sous forme de stream justement?

godrik
godrik
Niveau 30
30 mars 2011 à 18:02:49

subprocess peut te donner un filedescriptor. Mais pour ce qu'on en fait on s'en fout parceque la sortie ne fait pas un kilooctet. Donc je n'ai pas d'exemple de code.

Kaoron
Kaoron
Niveau 9
31 mars 2011 à 08:22:04

proc = subprocess.Popen(["/bin/sh", "myforloop.sh"], stdout=subprocess.PIPE)
proc.stdout.readline() # Consume une ligne de la sortie standard

'1\n'

proc.stdout.readline()

'2\n'

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment