IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

subprocess.call et stdout


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut subprocess.call et stdout
    Bonjour,

    J'utilise subprocess.call(ma_commande) pour exécuter un programme externe et récupérer son code retour.

    Quand je lance mon script dans PyCharm, la sortie du programme externe s'affiche dans la même console que les logs de mon script. Quand je lance ce même script dans le power shell de windows, je ne vois que les logs de mon script. Or, je voudrais voir la sortie du programme externe.

    Des idées sur ça ?

    Merci d'avance !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 707
    Par défaut
    Salut,

    Si vous n'avez pas redirigé les stderr, stdout,... l'exécution du programme depuis la console Windows cmd.exe devrait tout afficher... Et dans ce cas, la question serait de savoir que fait Powershell des sorties d'un programme à éventuellement "augmenter" d'un test genre subprocess.call d'un script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    print ('***stderr' * 3, file=sys.stderr)
    print ('+++stdout' * 3, file=sys.stdout)
    qui dira si tout s'affiche ou pas...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    En fait, mon objectif réel n'est pas powershell mais Jenkins. Et il s'avère que la sortie du programme s'affiche très bien dans Jenkins...

    Néanmoinns, je refais quelques tests pour tirer ça au clair. Si je me mets dans Idle dans l'interpréteur interactif, voici ce que j'obtiens :
    >>> subprocess.call("doxygen -v")
    0
    >>> 
    Je vois brièvement une fenêtre cmd qui s'ouvre et qui se ferme.

    Si j'ouvre powershell ou cmd, que je lance l'interpréteur interactif et que je tape les mêmes lignes de code, j'obtiens alors :
    >>> subprocess.call("doxygen -v")
    1.8.13
    0
    Ca sent l'histoire de qui lance le subprocess et comment il le lance. C'est pas super clair mais je sais pas si ça sert à grand chose de vraiment savoir...

    PS : jai testé d'appeler le petit programme que tu donnes. J'ai fait un main.py qui lance un sub.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import subprocess
    print "Call subprocess"
    subprocess.call("python sub.py")
    print "Done"
    Lancé via Idle :
    >>> 
    Call subprocess
    Done

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 707
    Par défaut
    Citation Envoyé par Bktero Voir le message
    PS : jai testé d'appeler le petit programme que tu donnes. J'ai fait un main.py qui lance un sub.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import subprocess
    print "Call subprocess"
    subprocess.call("python sub.py")
    print "Done"
    Lancé via Idle :
    >>> 
    Call subprocess
    Done
    Sous IDLE essayez print ('toto', file=sys.stdout) vs print ('toto', file=sys.__stdout__).
    Le premier devrait s'afficher correctement alors que le second va s'afficher dans le terminal (le cmd depuis lequel a été lancé IDLE).
    Le problème est que la console Python est construite avec un GUI (ici tkinter). Et si on veut que l'interface graphique récupère les sorties des instructions pour les afficher "proprement", il faut rediriger stdout vers un "buffer" qui ne sera pas utilisable pour les entrées/sorties standards du process créé par subprocess.call (qui utilisera par défaut sys.__stdout__).

    C'est pas super clair mais je sais pas si ça sert à grand chose de vraiment savoir...
    Il n'y a que vous pour savoir que faire d'une telle information.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Exécuter un programme (avec des options) avec subprocess.call
    Par cal23 dans le forum Général Python
    Réponses: 2
    Dernier message: 09/07/2017, 14h43
  2. problème avec subprocess.call() et l'AJAX
    Par alaninho dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 12/09/2014, 10h49
  3. window 7 python subprocess.call() n'attend pas
    Par chticricri dans le forum Général Python
    Réponses: 2
    Dernier message: 12/03/2012, 17h13
  4. stdout en temps réel et subprocess
    Par lucaskywalker dans le forum Général Python
    Réponses: 7
    Dernier message: 08/01/2012, 22h51
  5. Réponses: 9
    Dernier message: 22/11/2011, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo