2017-08-17 1 views
0

J'ai fait un script python en utilisant subprocess qui entre autres choses pousse les changements validés dans le dépôt git distant. Les fichiers ont vraiment poussé vers le repo distant mais pour une raison quelconque, je reçois seulement la dernière ligne du message git qui apparaît après le push.Git Push à partir de Python ne montre pas le message complet

est ici la paix pertinente du code:

p = subprocess.Popen('git push --tag origin HEAD:develop' ,stdout=subprocess.PIPE,stderr=subprocess.STDOUT') 
     result = p.communicate()[0] 
     print ("Result from GIT: " + result) 

imprime les suivantes:

Result from GIT: To https://example.org/someUser/repo.git 
    fe4929f6..25bb62e9 HEAD -> develop 
* [new tag]   1.0.1.7 -> 1.0.1.7 

Alors que le message complet, qui est ce que je reçois quand je fais la poussée du terminal Windows est :

Counting objects: 25, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (23/23), done. 
Writing objects: 100% (25/25), 2.18 KiB | 0 bytes/s, done. 
Total 25 (delta 20), reused 0 (delta 0) 
To https://example.org/someUser/repo.git 
    828b9e31..249be2ba HEAD -> develop 

Y at-il un moyen que je puisse obtenir le message complet (afin que je puisse l'imprimer dans mon script) et pas seulement la dernière ligne?

Merci

+0

Vous avez le même résultat si vous redirigez la sortie d'erreur vers un fichier, dans le terminal – coredump

Répondre

2

Lorsque git, vous devez ajouter le drapeau --progress.

du manuel de git (run git help push)

--progress

état d'avancement est rapporté sur le flux d'erreur standard par défaut lorsqu'il est fixé à un terminal, à moins que -q est spécifiée. Ce drapeau force l'état d'avancement même si le flux d'erreur standard n'est pas dirigé vers un terminal.

Cela peut être intégré dans votre programme comme suit:

p = subprocess.Popen('git push --progress --tag origin HEAD:develop' ,stdout=subprocess.PIPE,stderr=subprocess.STDOUT') 
    result = p.communicate()[0] 
    print ("Result from GIT: " + result) 

Notez que l'utilisation de ce drapeau peut faire l'analyse syntaxique de la sortie du script plus difficile, en tant que sortie lisible par l'homme de git peut changer à l'avenir libérations de git sans avertissement. (Utilisez --porcelain pour faire le contraire de ce que vous avez demandé, produire une sortie lisible par machine toujours)

+0

si simple, merci mec. – Noam